将所有的Maven依赖下载到不在版本库中的目录?
我开始把我的项目转换为maven,因为我需要使用一个二进制forms的库,而不是maven,但是在我的头撞在墙上太久以后,我决定停止伤害自己,只是使用ant。 我只想让maven将jar和所有的传递依赖项下载到我select的目录中,这样我就可以像平时那样将它们检入到我的SCM中,并再次成为一个幸福的开发人员。
任何想法如何轻松做到这一点?
maven依赖插件可以潜在地解决你的问题。
如果你有一个指定了所有项目依赖关系的pom
,那么你只需要运行mvn dependency:copy-dependencies
就可以find包含所有依赖的target/dependencies
文件夹,包括可传递的。
创build一个ivy.xml文件来列出你的项目的依赖关系:
<ivy-module version="2.0"> <info organisation="org.demo" module="demo"/> <configurations defaultconfmapping="default"/> <dependencies> <dependency org="commons-lang" name="commons-lang" rev="2.6"/> .. </dependencies> </ivy-module>
下载这些jar子及其传递的依赖关系现在可以通过两种方式之一来完成。
命令行
常春藤可以作为命令行程序运行。 以下示例将下载到本地“lib”目录中:
java -jar ivy-2.2.0.jar -ivy ivy.xml -retrieve "lib/[artifact].[ext]"
ANT构build
常春藤是最好的使用时,集成到您的ANT构build。 以下示例目标将jar下载到本地lib目录,并生成HTML报告以进行依赖关系分析。
<target name="retrieve" description="Retrieve dependencies locally"> <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"/> <ivy:report todir="${report.dir}" graph="false"/> </target>
基于@Raghuram的答案,我find了复制项目依赖关系的教程,只是:
-
打开你的项目
pom.xml
文件,并find这个:<project> [...] <build> <plugins> ... </plugins> </build> [...] </project>
-
将
<plugins> ... </plugins>
replace为:<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> </plugins>
-
并在命令行中调用maven
mvn dependency:copy-dependencies
完成后,它将在pom.xml
所在的当前目录的所有jar
target/dependency
创build文件夹target/dependency
。
我find了下一个命令
mvn dependency:copy-dependencies -Dclassifier=sources
这里maven.apache.org
请检查${MAVEN_HOME}/conf
目录中的某些configuration文件,如settings.xml
。 这些文件覆盖.m2
文件夹中的设置,因此, .m2
存储库文件夹可能不可见或被丢弃。