从本地maven存储库复制工件

问题描述 投票:7回答:4

我不明白为什么这么难:

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

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

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

maven nexus
4个回答
4
投票

似乎问题是_maven.repositories文件与我公司的特定maven设置一起使用。

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

但是,在使用复制时,您无法指定URL。但我为什么要这样做?我刚把那件神器下载到我的本地仓库,对吗?

这就是_maven.repositories文件发挥作用的地方。即使使用-o开关,maven3也会查询该文件,该文件指定了工件来自的原始仓库。 (感谢this thread的人发布他们的发现!)。如果它无法到达回购,它将声称您的文件不在那里。 (顺便说一下,这对imho来说没什么用。它应该说原始回购无法访问,因此文件不会被复制。)

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

简单地重命名该文件就可以了。

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

为了使事情变得更复杂,我无法使用依赖:复制或依赖:复制依赖。由于某些原因,他们需要一个pom,我在用例中没有。什么工作是org.apache.maven.plugins:maven-dependency-plugin:2.8:我认为应该是同样的副本,但这是另一个故事。

谢谢你的回答!


3
投票

试过这个,它对我有用:

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

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


1
投票

如果您使用的是Sonatype Nexus,则应考虑禁用“Central”as outlined in their book

否则,根据@Keith,dependency:copy-dependency会做你想做的事情。 dependency:get专门从远程存储库as stated in the documentation下载

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

编辑

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


0
投票

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

mvn dependency:copy \
  -Dartifact=org.openmrs.web:openmrs-webapp:2.2.0-SNAPSHOT:war \
  -DoutputDirectory=/tmp
© www.soinside.com 2019 - 2024. All rights reserved.