7

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

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

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

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

4

4 回答 4

4

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

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

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

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

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

只需重命名该文件即可。

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

更复杂的是,我不能使用dependency:copy 或dependency:copy-dependecies。由于某些原因,他们需要一个 pom,而我的用例中没有。起作用的是 org.apache.maven.plugins:maven-dependency-plugin:2.8:copy 我相信它应该是同一件事,但这是另一回事。

感谢您的回答!

于 2013-07-08T09:05:28.077 回答
3

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

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

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

于 2013-07-04T14:42:24.100 回答
1

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

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

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

编辑

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

于 2013-07-04T15:05:27.650 回答
0

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

mvn dependency:copy \
  -Dartifact=org.openmrs.web:openmrs-webapp:2.2.0-SNAPSHOT:war \
  -DoutputDirectory=/tmp
于 2018-03-04T17:31:30.627 回答