复制特定工件
在复制特定工件时,您需要将dependency:copy
mojo 绑定到生命周期、配置插件并指定要复制的工件。请参见以下示例:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> </execution> </executions> <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> </artifactItem> </artifactItems> <outputDirectory>${project.build.directory}/wars</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> </configuration> </plugin> </plugins> </build> [...] </project>
然后在执行之后mvn package
,将工件(junit)复制到给定的备用位置。
工件按顺序从以下来源解析:
- 目前的反应堆,
- 本地存储库,
- 配置的远程存储库。
如果无法从上述来源解决工件,则构建将失败。
如果工件也被列为依赖项,则version
ofartifactItem
将默认为来自dependencies
or的版本dependencyManagement
,例如
<project> [...] <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>junit</groupId> <artifactId>junit</artifactId> <overWrite>false</overWrite> <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory> <destFileName>optional-new-name.jar</destFileName> </artifactItem> </artifactItems> <outputDirectory>${project.build.directory}/wars</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
如果需要,该dependency:copy
目标还可用于将刚刚构建的工件复制到自定义位置。它必须绑定到包阶段之后的任何阶段,以便工件存在于存储库中。以下配置显示了如何(在这种情况下绑定到安装阶段):
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy-installed</id> <phase>install</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> <type>${project.packaging}</type> </artifactItem> </artifactItems> <outputDirectory>some-other-place</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
使用备用本地存储库
dependency:copy总是首先将工件下载到默认的本地存储库,然后将工件复制到所需的位置。对于大尺寸的独特快照工件,在多次执行后,下载可以快速填满默认的本地存储库,从而填满本地磁盘。要在构建过程中清理下载的工件,请将localRepositoryDirectory的值设置为项目目标目录中的某个位置。
此用例也适用于依赖项:解包目标。
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy-with-alternalte-repo</id> <phase>install</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> [...] </artifactItem> [...] </artifactItems> <localRepositoryDirectory>${project.build.directory}/localrepo</localRepositoryDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>
从命令行复制
如果您打算将此 mojo 配置为在命令行上执行,请使用:
mvn dependency:copy
您不能将配置放在executions标签内。您的配置应如下所示:
<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <configuration> <artifactItems> <artifactItem> <groupId>[ groupId ]</groupId> <artifactId>[ artifactId ]</artifactId> <version>[ version ]</version> <type>[ packaging ]</type> <overWrite>[ true or false ]</overWrite> <outputDirectory>[ output directory ]</outputDirectory> <destFileName>[ filename ]</destFileName> </artifactItem> </artifactItems> <!-- other configurations here --> </configuration> </plugin> </plugins> </build> [...] </project>