通过传递性下载Maven构件到本地仓库。

7
我正在尝试将一个特定的构件(以及它的所有依赖项)下载到机器的本地仓库中。
看起来,使用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个回答

7
如果这只是您偶尔需要的功能,最简单的方法是在POM中定义依赖项,然后运行“mvn package”或类似命令以检索依赖项构件。如果您还想获取源码包,也可以尝试使用“mvn dependency:sources”。
如果您需要经常执行此操作或将其作为流程的一部分,请考虑直接使用Aether来检索依赖项。
如果您需要经常执行此操作以将一组构件管理到内部开发生态系统中,则可以使用Nexus采购套件来检索依赖项并将其管理到您的存储库中。

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 目标来复制所有依赖项。

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

您将在创建的 c:\ test \ dependency 文件夹中找到依赖项(包括 test optional 范围!)。 要排除测试和可选范围,请使用 -DincludeScope = runtime
您需要动态构建一些路径信息(例如,存储库中pom的路径)来设置此解决方案,并且还需要将工件本身与其依赖项一起放置在脚本中,但它应该在不生成特殊pom的情况下运行(这可能更容易)。

我选择使用选项3,并且在maven 3.6.3中运行得非常好。 - Vahid Pazirandeh

3

看起来问题1的答案是肯定的(这是dependency:get目标的一个错误吗?)。截至2011年5月25日,问题MDEP-308仍未解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接