我知道使用mvn dependency:sources
可以下载所有依赖项的来源。使用mvn copy-dependencies
,可以将所有依赖项下载到指定的本地目录中。
如何将两者结合起来以便将所有依赖项的源复制到目录?
答案 0 :(得分:2)
我不会使用任何这些解决方案。
只需将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>
您可以更改多个项目以满足您的需求,例如,在我给您的示例中,我认为直接为您提供解决方案,我已指定在任何阶段都不会复制alternateLocation的依赖项在tmp文件夹中。但是我也说我的新目标是复制依赖。所以在命令行中,这将是:
mvn dependency:copy-dependencies
如果您发现我现在已经配置了两次 outputDirectory 。在执行过程中,这意味着只有在运行指定的maven构建阶段时才会考虑它,例如打包,清洁,测试,... ......作为插件节点的第一个子兄弟,这意味着当命令行显式地调用依赖插件时,将考虑它,这就是你想要的。
您可以在此处找到有关maven-dependency插件的更多信息:
由于您需要同时使用依赖项和源代码,因此我能想到的最好方法是正常运行maven而不需要对实际插件进行隐式调用。如果您通过后清理阶段(即mvn post-clean)运行它,它将运行以下两个目标:
<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>
它将始终将副本复制到目标文件夹,但如果文件已存在则不会覆盖。我不得不选择一个非常用的阶段。 后清洁似乎是这里的最佳候选人。这只是在想我想要隔离这种构建。 后清理也可以清理构建。如果您只想在每次构建时继续使用此插件,那么我建议将其置于 clean 或 install 阶段。这样它总是在后台发生,你不用担心它。
答案 1 :(得分:0)
您可以简单地使用
mvn dependency:copy-dependencies -Dclassifier=sources
它将下载链接到项目依赖项的所有源jar,并将其复制到yourProject/target/dependency
文件夹中
maven-dependency-plugin的可选参数“ classifier”在此处记录 https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html