'maven assembly plugin war packaging unexpected output result

I tried using the maven war plugin but is very opinionated on the folder structure and I need specific files into specific folders, so I've looked into using maven assembly plugin with the war format set.

Here's a snippet of the pom.xml.

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
      <descriptors>
        <descriptor>src/main/assembly/war-assembly.xml</descriptor>
      </descriptors>
      <finalName>${project.artifactId}-assembly</finalName>
      <appendAssemblyId>false</appendAssemblyId>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

and the war-assembly.xml

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
    <id>war</id>
    <formats>
        <format>war</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>webapp/WEB-INF/lib</outputDirectory>
            <excludes>
                <exclude>*:war</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/${project.artifactId}/WEB-INF</directory>
            <outputDirectory>webapp</outputDirectory>
            <includes>
                <include>/**/*</include>
            </includes>
            <excludes>
                <exclude>webapp/lib</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/${project.artifactId}</directory>
            <outputDirectory>webapp</outputDirectory>
            <includes>
                <include>/**/*</include>
            </includes>
            <excludes>
                <exclude>WEB-INF</exclude>
                <exclude>META-INF</exclude>
                <exclude>info.xml</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>README*</include>
                <include>LICENSE*</include>
                <include>NOTICE*</include>
            </includes>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <source>${project.build.directory}/${project.artifactId}/info.xml</source>
            <filtered>true</filtered>
            <outputDirectory></outputDirectory>
        </file>
    </files>
</assembly>

this produces the desired outcome in terms of where i need the files to be copied to, except something still packages lib folder, classes folder and the web.xml into the webapp folder, which I do not want.

Outputted directory structure:

Output directory structure

Expected Directory Structure (lib, classes and web.xml) are removed because they are in the webapp/WEB-INF sub folder:

Expected directory structure

am I using the maven plugin incorrectly? or a setting that I am overseeing? Or a way to set the output directories for the classes, lib, and the web.xml?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source