我可以通过安装工件install:install-file
,但是如何下载工件呢?
例如:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
我可以通过安装工件install:install-file
,但是如何下载工件呢?
例如:
mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST
Answers:
您可以使用maven依赖插件,该插件dependency:get
自2.1版本起就有一个不错的目标。无需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之前的版本),可以dependency:get
通过强制您的Maven副本使用给定版本的插件来正常运行(而不使用完全限定的名称和版本)。
可以按照以下步骤进行:
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。实际上,根据插件注册表简介,该插件的功能plugin-registry.xml
已经过重新设计(出于可移植性),并且插件注册表当前在Maven 2中处于半休眠状态。因此,我认为我们现在必须使用长名称(使用不带pom的插件时,这是背后的想法dependency:get
)。
:jar:sources
到工件上,请参见stackoverflow.com/a/31109185/537554
mvn dependency:get -Dartifact=group-id:artefact-id:version
使用最新版本(2.8)的Maven依赖插件,从Maven中央存储库下载工件很简单:
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进行测试的示例:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources
(感谢Pascal Thivent首先提供了他的精彩回答。我添加了另一个答案,因为它不适合评论,而且对于编辑而言过于广泛。)
jar:sources
意思吗?为什么需要指定“罐子”?“源”是否意味着它将下载工件需要的其他依赖关系?
sources
是仅包含Java源代码javadoc
的JAR文件; 3. 是仅具有API文档的JAR文件。另请参阅:Maven默认工件处理程序。
[:classifier]
如果我有一个assemlby插件创建了要下载的zip文件,那么感谢您澄清如何正确使用。
这是我最后使用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 \
-DrepoUrl
,但我想它还是从pom暗示的。我也没有使用,-Ddest
因为我确实希望将其下载到常规.m2
目录。
Goal requires a project to execute but there is no POM in this directory
。
mvn dependency:copy
(无需dependency:get
首先)。
关于如何获取工件二进制文件,Pascal Thivent的答案是它,但也要获取工件源jar,我们可以使用:
mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources
例如
mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources
之所以有效,artifact
是因为参数实际上由组成groupId:artifactId:version[:packaging][:classifier]
。仅包装和分类器是可选的。
使用jar
as 包装和sources
as 分类器,maven依赖插件可以理解,我们是在请求源jar,而不是工件jar。
不幸的是,目前无法从源代码下载jar文件,这确实很有意义,但是理想情况下,我相信它也可以downloadSources
像maven eclipse插件一样尊重该选项。
可以使用dependency:copy(http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html)来获取插件配置部分中定义的工件列表,并将其复制到指定位置,重命名它们或根据需要剥离版本。如果本地存储库或反应堆中都不存在远程工件,则此目标可以解决这些工件。
并非插件的所有属性都可以在maven CLI中使用。可以指定定义了“用户属性:”属性的属性。在下面的示例中,我将junit下载到我的temp文件夹中,并从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。我添加了另一个答案)
官方文档中的用法:
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=.
使用命令“ mvndependency:get”下载特定的aritfact,并使用命令“ mvndependency:copy”将下载的工件复制到dest dir“ -DoutputDirectory”
这是一个使用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