将Maven工件传递下载到本地存储库

时间:2011-05-25 05:44:02

标签: maven transitive-dependency

我正在尝试将特定工件(及其所有依赖项)下载到计算机的本地存储库。

似乎使用依赖:get目标将是最好的选择,但是尽管有文档,它似乎并没有真正获得传递依赖。

以下是我尝试使用dependency:get下载spring-core jar及其所有依赖项的示例。您会注意到尽管事实上这是在清理本地存储库之后完成的,但Spring-core jar是唯一下载的东西。

$ mvn org.apache.maven.plugins:maven-dependency-plugin:2.2:get -DrepoUrl=http://repo1.maven.org/maven2/ -Dartifact=org.springframework:spring-core:3.0.5.RELEASE -Dtransitive=true
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.2:get (default-cli) @ standalone-pom ---
Downloading: http://repo1.maven.org/maven2/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar
Downloaded: http://repo1.maven.org/maven2/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar (374 KB at 548.4 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.401s
[INFO] Finished at: Wed May 25 00:29:47 CDT 2011
[INFO] Final Memory: 7M/107M
[INFO] ------------------------------------------------------------------------



我的问题是:

  1. 这是dependency:get目标的错误吗?
  2. 如果没有,我做错了什么?
  3. 我可以使用任何替代方法来实现我最初设定的目标吗?

3 个答案:

答案 0 :(得分:6)

如果这是一次或不定期发生,最简单的事情是在POM中定义依赖关系并运行mvn package或类似的方法来检索依赖项工件。如果您也想要源代码,也可以尝试mvn dependency:sources

如果您希望更频繁地或作为流程的一部分执行此操作,则可以直接使用Aether来检索依赖项。

如果您需要定期管理工件组到内部开发生态系统中,那么另一种方法是使用Nexus' procurement suite检索依赖关系并将它们管理到您的存储库中。

答案 1 :(得分:4)

您可以使用此解决方案

1)按照您所描述的方式下载工件(我使用2.5.2版测试)

c:\test>mvn -DrepoUrl=http://repo1.maven.org/maven2/ -Dartifact=org.springframework:spring-core:2.5.2 -Dtransitive=true

2)下载此工件的pom(-Dpackaging=pom

c:\test>mvn -DrepoUrl=http://repo1.maven.org/maven2/ -Dartifact=org.springframework:spring-core:2.5.2 -Dtransitive=true -Dpackaging=pom org.apache.maven.plugins:maven-dependency-plugin:2.2:get

3)使用下载的pom通过dependency:copy-dependency gaol

复制所有依赖项
c:\test>mvn -DoutputDirectory=C:/test/dependency -f C:/<path-to-repository>/org/springframework/spring-core/2.5.2/spring-core-2.5.2.pom dependency:copy-dependencies

您将在创建的test文件夹中找到依赖项(包括optionalc:\test\dependency范围!)。要排除测试和可选范围,请使用-DincludeScope=runtime

您需要动态构建一些路径信息(例如,存储库中pom的路径)以设置此解决方案,并且还需要将工件本身与其依赖项一起使用,但它应该在脚本中工作而不会生成特殊的pom (这可能更容易)。

答案 2 :(得分:3)

这似乎是问题#1的答案(这是依赖的错误:获得目标吗?)是肯定的。自2011年5月25日起,问题MDEP-308仍未解决。