This is pretty similar to the Copying Specific Artifacts example. The difference is that instead of copying the artifacts, they are unpacked. To unpack the copied artifacts, use the dependency:unpack mojo and configure the plugin into something like the sample below:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>unpack</id> <phase>package</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <type>jar</type> <overWrite>false</overWrite> <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory> <destFileName>optional-new-name.jar</destFileName> <includes>**/*.class,**/*.xml</includes> <excludes>**/*test.class</excludes> </artifactItem> </artifactItems> <includes>**/*.java</includes> <excludes>**/*.properties</excludes> <outputDirectory>${project.build.directory}/wars</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
And after invoking mvn package, the artifacts are unpacked. Because checking the existence of an unpacked archive is difficult to do reliably, marker files are used instead. The location of the marker files is controlled by the markersDirectory parameter.
If you intend to configure this mojo for execution on the command line using:
mvn dependency:unpack
you must not put the configuration inside the executions tag. Your configuration should look like this:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.1.1</version> <configuration> <artifactItems> <artifactItem> <groupId>[ groupId ]</groupId> <artifactId>[ artifactId ]</artifactId> <version>[ version ]</version> <type>[ packaging ]</type> <classifier> [classifier - optional] </classifier> <overWrite>[ true or false ]</overWrite> <outputDirectory>[ output directory ]</outputDirectory> <destFileName>[ filename ]</destFileName> <includes>[ comma separated list of file filters ]</includes> <excludes>[ comma separated list of file filters ]</excludes> </artifactItem> </artifactItems> <!-- other configurations here --> </configuration> </plugin> </plugins> </build> [...] </project>