我知道使用mvn依赖:源可以下载所有依赖项的源.使用mvn copy-dependencies,可以将所有依赖项下载到指定的本地目录中.
如何将两者结合起来以便将所有依赖项的源复制到目录中?
最佳答案 我不会使用任何这些解决方案.
只需将maven-dependeny-plugin包含在maven构建中,然后根据需要调整配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<configuration>
<outputDirectory>/tmp/alternateLocation</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>none</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>/tmp/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
您可以更改几个项目以满足您的需求,例如,在我给您的示例中,我认为直接为您提供了解决方案,我已经指定在任何阶段都不会将相关性复制到tmp中的alternateLocation夹.但是我也说我的新目标是复制依赖.所以在命令行中这将是这样的:
mvn dependency:copy-dependencies
如果你注意到我现在已经配置了两次outputDirectory.在执行过程中,这意味着只有在运行指定的maven构建阶段(例如打包,清理,测试……)时才会考虑它.作为插件节点的第一个子兄弟,这意味着当命令行显式地调用依赖插件时,将考虑它,这是你想要的.
您可以在此处找到有关maven-dependency插件的更多信息:
> https://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-project-dependencies.html
由于您需要同时使用依赖项和源代码,因此我能想到的最佳方法是正常运行maven而不需要对实际插件进行隐式调用.如果你通过后清洁阶段(即mvn后清理)运行它将运行以下两个目标:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<configuration>
<outputDirectory>/tmp/alternateLocation</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>post-clean</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>/tmp/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
<execution>
<id>sources</id>
<phase>post-clean</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<classifier>sources</classifier>
<outputDirectory>/tmp/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
它将始终将副本复制到目标文件夹,但如果文件已存在则不会覆盖.我不得不选择一个非常用的阶段.后清洁似乎是这里的最佳候选人.这只是在想我想要隔离这种构建. post-clean也可以清理构建.如果你只想在每次构建时继续使用这个插件,那么我建议把它放在干净或安装阶段.这样它总是发生在后台,你不担心它.