如何在一个命令行中下载特定的Maven工件?

我可以通过安装安装一个工件:安装文件,但是我怎样才能下载呢,例如:

mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST 

任何想法?

你可以使用具有良好dependency:get的Maven依赖项插件 dependency:get从版本2.1开始dependency:get目标。 没有需要一个POM,一切都发生在命令行上。

为了确保finddependency:get目标,您需要明确告诉maven使用版本2.1,即您需要使用插件的完全限定名称,包括版本:

 mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \ -DrepoUrl=url \ -Dartifact=groupId:artifactId:version 

更新:使用旧版本的Maven(在2.1之前),可以运行dependency:get通过强制你的maven副本使用给定版本的插件来正常dependency:get (不使用完全限定的名称和版本)。

这可以如下完成:

1.在~/.m2/settings.xml文件的<settings>元素中添加以下行:

 <usePluginRegistry>true</usePluginRegistry> 

2.使用以下内容添加文件~/.m2/plugin-registry.xml

 <?xml version="1.0" encoding="UTF-8"?> <pluginRegistry xsi:schemaLocation="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0 http://maven.apache.org/xsd/plugin-registry-1.0.0.xsd" xmlns="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <useVersion>2.1</useVersion> <rejectedVersions/> </plugin> </plugins> </pluginRegistry> 

但是,这似乎不工作了与Maven的2.1 / 2.2。 实际上,根据Plugin Registry的介绍 , plugin-registry.xml已经被重新devise(为了可移植性),并且Maven 2中插件registry目前处于半hibernate状态 。 所以我认为我们现在必须使用长名称(当使用没有pom的插件时,这是dependency:get背后的想法dependency:get )。

使用Maven Dependency插件的最新版本(2.8),从Maven Central Repository下载工件非常简单:

 mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]] 

其中groupId:artifactId:version等是Maven坐标

一个例子,用Maven 2.0.9,Maven 2.2.1和Maven 3.0.4进行testing:

 mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources 

(感谢Pascal Thivent首先提供了他的精彩答案 ,我又添加了另一个答案,因为它不适合评论,而且对于编辑来说太广泛了。)

下面是我用Maven 3.1.1下载最新版本的一个名为“component.jar”的工具(其他build议没有,主要是由于我相信Maven版本的改变)

这实际上下载文件并将其复制到本地工作目录

从bash:

 mvn dependency:get \ -DrepoUrl=http://.../ \ -Dartifact=com.foo.something:component:LATEST:jar \ -Dtransitive=false \ -Ddest=component.jar \ 

一个class轮下载最新的maven神器没有mvn:

 curl -O -J -L "https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.staticcdn.sdk&a=staticcdn-sdk-standalone-optimizer&e=zip&v=LATEST" 

关于如何获得神器二进制, Pascal Thivent的答案是,但也得到神器源码jar,我们可以使用:

 mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources 

例如

 mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources 

这是groupId:artifactId:version[:packaging][:classifier]因为artifact参数实际上由groupId:artifactId:version[:packaging][:classifier] 。 只是包装分类是可选的。

jar作为包装sources作为分类器 ,maven依赖插件明白我们要求的是jar而不是artifacts jar。

不幸的是现在的源代码jar文件不能被传递下载,这是有道理的,但理想情况下,我确实相信它也可以像maven eclipse插件一样尊重downloadSources选项。

我们可以使用依赖:copy( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html ),它接受插件configuration部分中定义的工件列表并将它们复制到指定位置,重命名它们或者根据需要剥离版本。 如果这个目标不存在于本地仓库或反应堆中,这个目标可以解决远程仓库的工件问题。

并非所有插件的属性都可以在maven CLI中使用。 可以指定具有“User Property:”属性的属性。 在下面的例子中,我正在下载junit到我的临时文件夹,并从jar文件中剥离vesion。

 mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true 

其中artifact = junit:junit:4.11是maven的坐标。 你指定artifcat为groupId:artifactId:version [:packaging [:classifier]]

(感谢Pascal Thivent首先提供了他的https://stackoverflow.com/a/18632876/2509415 ,我正在添加另一个答案)

命令:

 mvn install:install-file 

通常将工件安装在本地存储库中,因此您不需要下载它。 但是,如果要与其他人共享工件,则需要将工件部署到中央存储库,请参阅部署插件以获取更多详细信息。

另外,向您的POM添加依赖关系会自动获取您构build项目时所需的任何第三方构件。 即这将从中央存储库下载工件。