繁体   English   中英

从本地 Maven 存储库复制工件

[英]copy artifact from local maven repository

我不明白为什么这如此困难:

在脚本中,我需要将工件从 nexus 复制到某个目录。 使用 Nexus REST API,我必须指定我不想知道的存储库。 所以我尝试使用 maven-dependency-plugin 的 get 目标来获取工件,效果很好。 (在这种情况下,我从我们关系中的一个小组那里得到它,其中包括发布和快照。)

但是,我现在在我的本地存储库中有工件,并且同一个插件的“复制”目标似乎无法将工件从那里取出。 真的有必要进入 .m2 文件夹并使用 unix cp 命令抓取那个 jar 吗? 以前有人将工件从本地存储库复制到其他目录吗?

或者,如果有人可以告诉我如何在不指定 repo 的情况下通过 Nexus API 获取工件,那也可以。

问题似乎是 _maven.repositories 文件与我公司的特定 maven 设置有关。

我们不会在我们的 settings.xml 中放置有关本地存储库的信息。 这一切都在我们所有项目使用的父 pom 中。 但是如果你想做一些纯粹的 mvn-CLI 魔法,你没有 parent-pom,所以你必须自己提供本地 repo 的 URL。 这可以通过dependecy:get 目标实现,这就是为什么我能够将我的工件从我们的Nexus 下载到我的本地存储库中。

但是,在使用copy时,您不能指定 URL。 但我为什么要这样做? 我刚刚将该工件下载到我的本地存储库中,对吗?

这就是_maven.repositories文件发挥作用的地方。 即使使用 -o 开关,maven3 也会查询该文件,该文件指定工件来自的原始存储库。 (感谢这个线程中的人发布他们的发现!)。 如果它无法访问 repo,它将声称您的文件不存在。 (顺便说一句,恕我直言,这没有帮助。它应该说明无法访问原始存储库,因此不会复制该文件。)

这就是复制对我不起作用的原因。

只需重命名该文件即可。

不过,我将不得不为此研究一个更清洁的解决方案。

更复杂的是,我不能使用dependency:copy 或dependency:copy-dependecies。 由于某些原因,他们需要一个 pom,而我的用例中没有。 什么工作是 org.apache.maven.plugins:maven-dependency-plugin:2.8:copy 我认为应该是一样的东西,但那是另一个故事。

感谢您的回答!

刚试过这个,它对我有用:

mvn dependency:copy-dependencies -DincludeArtifactIds=jcharts -DincludeGroupIds=jcharts -DoutputDirectory=/tmp/

这将工件 jcharts:jcharts 复制到 /tmp/ 执行此操作时它在我的本地(和远程)存储库中。

如果您使用的是 Sonatype Nexus,您应该考虑禁用他们的书中概述的“中央”。

否则,根据@Keith, dependency:copy-dependency会做你想做的事。 dependency:get从远程存储库中dependency:get特别下载,如文档中所述

您还可以通过在离线模式下运行来强制 Maven 不从非本地存储库下载: -o

编辑

您还可以使用Maven Wagon 插件将文件从本地存储库复制到任意目录。 这不应该需要 pom(但您可能需要提供 jar 的完整 URL)。

我需要能够指定组 ID、工件 ID 和版本(和包装),这对我有用:

mvn dependency:copy \
  -Dartifact=org.openmrs.web:openmrs-webapp:2.2.0-SNAPSHOT:war \
  -DoutputDirectory=/tmp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM