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

可传递地将Maven工件下载到本地存储库,maven,transitive-dependency,Maven,Transitive Dependency,我正在尝试将特定工件(及其所有依赖项)下载到机器的本地存储库中 $ 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]

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

$ 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] ------------------------------------------------------------------------
使用dependency:get目标似乎是最好的选择,但是尽管有文档,它似乎并没有实际获得可传递的依赖项

下面是一个示例,我尝试使用
dependency:get
下载SpringCoreJAR及其所有依赖项。您会注意到,SpringCoreJAR是唯一下载的东西,尽管这是在清理本地存储库之后完成的

$ 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] ------------------------------------------------------------------------


我的问题是:

  • 这是一个带有
    依赖项:get
    目标的bug吗
  • 如果没有,我做错了什么
  • 有没有其他方法可以用来实现我最初设定的目标

  • 问题#1(这是一个依赖性错误:get goal?)的答案似乎是肯定的。截至2011年5月25日,该问题仍未解决。

    如果这是一次性或不定期的事件,最简单的方法是在POM中定义依赖项,然后运行
    mvn package
    或类似程序来检索依赖项工件。如果您也想要源jar,也可以尝试
    mvn dependency:sources

    如果这是您希望更经常或作为流程的一部分执行的操作,您可以考虑使用直接检索依赖项


    另一种方法是,如果您需要定期这样做,以便将工件组管理到您的内部开发生态系统中,那么可以使用它来检索依赖项并将它们管理到您的存储库中。

    您可以使用此解决方案

    $ 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) 下载您描述的工件(我使用版本2.5.2进行了测试)

    2) 下载此工件的pom(
    -dpacking=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
    
    c:\test>mvn-DoutputDirectory=c:/test/dependency-fc://org/springframework/springcore/2.5.2/spring-core-2.5.2.pom依赖项:复制依赖项
    
    您将在创建的
    c:\test\dependency
    文件夹中找到依赖项(包括
    test
    optional
    范围!)。要排除测试和可选范围,请使用
    -DincludeScope=runtime


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

    我选择使用选项3,它在maven 3.6.3中工作得很好