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

时间:2009-12-13 03:49:54

标签: maven-2

我可以通过install:install-file安装工件, 但是如何下载工件?

例如:

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

12 个答案:

答案 0 :(得分:155)

您可以使用自2.1版以来具有良好maven dependency plugin目标的dependency:get。不需要pom,一切都在命令行上发生。

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

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

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

这可以按如下方式完成:

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

<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。实际上,根据Introduction to the Plugin Registryplugin-registry.xml的功能已经过重新设计(便携性),而插件注册表目前处于Maven 2 内的半休眠状态。所以我认为我们现在必须使用长名称(当使用没有pom的插件时,这是dependency:get背后的想法)。

答案 1 :(得分:79)

使用Maven Dependency Plugin的最新版本(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 coordinates

使用Maven 2.0.9,Maven 2.2.1和Maven 3.0.4测试的一个例子:

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

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

答案 2 :(得分:31)

这对我来说最适合用Maven 3.1.1下载最新版本的名为“component.jar”的工件(其他建议没有,主要是因为maven版本更改我相信)

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

来自bash:

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

答案 3 :(得分:18)

关于如何获取工件二进制文件,Pascal Thivent's answer是它,但是为了得到工件源jar,我们可以使用:

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

e.g。

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

这是有效的,因为artifact参数实际上由groupId:artifactId:version[:packaging][:classifier]组成。只需打包分类器是可选的。

jar作为打包并将sources作为分类器,maven依赖插件了解我们要求的来源jar,不是神器罐子。

不幸的是,现在源jar文件无法传递下载,这确实有意义,但理想情况下我确信它也可以像maven eclipse插件那样尊重选项downloadSources

答案 4 :(得分:11)

在没有mvn的情况下下载最新的maven工件:

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"

答案 5 :(得分:8)

可以使用依赖项:copy(http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html),它会获取插件配置部分中定义的工件列表,并将它们复制到指定位置,根据需要重命名或剥离版本。如果远程存储库中的工件不存在于本地存储库或反应器中,则此目标可以解析这些工件。

并非所有插件的属性都可以在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。我正在添加另一个答案)

答案 6 :(得分:3)

官方文档中的用法:

https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get

对于我的情况,请参见以下答案:

mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6

#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.

使用命令mvn dependency:get下载特定的工件并使用 命令mvn dependency:copy将下载的工件复制到目标目录-DoutputDirectory

答案 7 :(得分:1)

您也可以在 PowerShell 中使用 docker 执行此操作:

docker run -it --rm -v ${PWD}:/build/source -v ${HOME}/.m2:/build/.m2 --net=host aemdesign/centos-java-buildpack:jdk8 /bin/bash --login -c 'mvn dependency:get -Dmaven.repo.local=/build/.m2/repository -DrepoUrl=https://repo1.maven.org/maven2 -Dartifact=io.prometheus.jmx:jmx_prometheus_javaagent:LATEST -Ddest=/build/source/jmx_prometheus_javaagent.jar'

或在 bash 中:

docker run -it --rm -v $PWD:/build/source -v $HOME/.m2:/build/.m2 --net=host aemdesign/centos-java-buildpack:jdk8 /bin/bash --login -c 'mvn dependency:get -Dmaven.repo.local=/build/.m2/repository -DrepoUrl=https://repo1.maven.org/maven2 -Dartifact=io.prometheus.jmx:jmx_prometheus_javaagent:LATEST -Ddest=/build/source/jmx_prometheus_javaagent.jar'

答案 8 :(得分:0)

命令:

mvn install:install-file 

通常installs本地存储库中的工件,因此您不需要下载它。但是,如果要与其他人共享工件,则需要将工件部署到中央存储库,有关详细信息,请参阅deploy plugin

此外,在您的POM中添加dependency将自动获取构建项目时所需的任何第三方工件。即这将从中央存储库下载工件。

答案 9 :(得分:0)

以下是使用Maven 3.6获取ASM-7的示例:

mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar

或者您可以从以下位置下载jar:https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm,然后

mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar

答案 10 :(得分:0)

LATEST已过时,请尝试使用范围[,)

./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \  
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"

答案 11 :(得分:0)

要在指定位置复制工件,请使用copy而不是get。

mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.2:copy \
  -DrepoUrl=someRepositoryUrl \
  -Dartifact="com.acme:foo:RELEASE:jar" -Dmdep.stripVersion -DoutputDirectory=/tmp/