将远程 maven2 工件下载到本地存储库的简单命令行?

Posted

技术标签:

【中文标题】将远程 maven2 工件下载到本地存储库的简单命令行?【英文标题】:A simple command line to download a remote maven2 artifact to the local repository? 【发布时间】:2010-12-19 02:08:57 【问题描述】:

我有一个使用 maven 2 分发的库。该库的典型用户不使用 maven 来构建他们的应用程序,但可能对 maven 有点熟悉并且可能已经安装了它。

我想记录一个“简单”的单行命令,他们可以使用它们将我的库的工件下载到他们的本地 ~/.m2/repository,而无需他们设置 pom.xml 来执行此操作。

我认为有办法做到这一点,但在查看了 install:install-filedependency 插件文档后似乎找不到它。我试过这样的事情:

mvn install:install-file -DrepositoryId=java.net -Durl=http://download.java.net/maven/2/ -Dfile=robo-guice-0.4-20091121.174618-1.jar -DpomFile=robo-guice-0.4-20091121.174618-1.pom -DgroupId=robo-guice -DartifactId=robo-guice -Dversion=0.4-SNAPSHOT -Dpackaging=jar

但我认为我在叫错树,因为安装插件似乎用于将本地构建的文件复制到本地存储库,而不是将远程工件下载到本地存储库。

这是我要安装的工件:http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

这可以使用 maven 吗?

【问题讨论】:

重复***.com/questions/1895492/… How can I download a specific Maven artifact in one command line?的可能重复 【参考方案1】:

从Maven Dependency Plugin 的 2.4 版开始,您还可以使用 -Ddest 标志为工件定义目标目标。它应该指向目标工件的文件名(而不是目录)。有关可以使用的其他参数,请参阅parameter page

mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
    -DremoteRepositories=http://download.java.net/maven/2 \
    -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT \
    -Ddest=c:\temp\robo-guice.jar

【讨论】:

谢谢! -Ddest 被标记为已弃用。有没有新的解决方案? 使用依赖:复制目标。 maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html 复制目标不复制传递deps。【参考方案2】:

自 Maven Dependency Plugin 的 2.1 版以来,有一个用于此目的的 dependency:get 目标。为确保您使用的是正确版本的插件,您需要使用“完全限定名称”:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \ -DrepoUrl=http://download.java.net/maven/2/\ -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT

【讨论】:

Pascal,你能告诉我如何定义用户+密码来访问存储库吗? user:password@repourl 的技巧没有奏效。 目标很好,但是如何定义我希望将文件复制到的目标目录? (和文件名) @domi(后人迟到的答案):使用“-Ddest=path/to/my.jar”;否则,它只会被复制到您的本地 ~/.m2/repository (让它看起来像什么都没发生)。见maven.apache.org/plugins/maven-dependency-plugin/… =example=> mvn org.apache.maven.plugins:maven-dependency-plugin:2.5.1:get -DremoteRepositories=repo.maven.apache.org -Dartifact=org.apache.ant:ant:1.8.1 -Ddest =ant-1.8.1.jar(结果:当前目录下的ant-1.8.1.jar) 谢谢!而在您发布的文档链接中,Deprecated. Use remoteRepositories 对应于 repoUrl。请更新答案也许:) 这是我的一个工作示例:mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get -DrepoUrl=https://repo.maven.apache.org/maven2/ -Dartifact=com.amazonaws:aws-java-sdk-support:1.10.77【参考方案3】:

给他们一个简单的 pom,将这些 jar 列为依赖项和运行说明:

mvn dependency:go-offline

这会将依赖项拉到本地仓库。

更直接的解决方案是dependency:get,但是要输入很多参数:

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version

【讨论】:

好主意,虽然他们可以复制粘贴的命令行会更容易 如果我能想到一个,我会发布它。我不知道有什么插件完全符合要求。我知道怎么写... get mojo 实际上期望-DrepoUrl 存在,而不是-DrepositoryUrl。关于 type 的参数,没有什么神奇的,你需要以某种方式提供这些信息。 在我的第一个方案中,最终用户只输入三个字符:mvn。所有其他类型的输入都由操作员完成。

以上是关于将远程 maven2 工件下载到本地存储库的简单命令行?的主要内容,如果未能解决你的问题,请参考以下文章

Git下载更新提交使用总结

maven2.2.1 本地库中已经包含所需构件,为啥打包的时候还从远程下载,但是却下载不不下来?

维护内部 Maven 存储库的技巧?

将远程 github 存储库的更改合并到本地存储库

ProGet 上传本地工件

Github 操作无法从 Github 包存储库下载工件