将所有的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了复制项目依赖关系的教程,只是:

  1. 打开你的项目pom.xml文件,并find这个:

     <project> [...] <build> <plugins> ... </plugins> </build> [...] </project> 
  2. <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> 
  3. 并在命令行中调用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存储库文件夹可能不可见或被丢弃。