从本地maven存储库复制工件

时间:2013-07-04 14:15:23

标签: maven nexus

我不明白为什么这么难:

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

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

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

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

只需重命名该文件即可。

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

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

感谢您的回答!

答案 1 :(得分:3)

试过这个,它对我有用:

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

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

答案 2 :(得分:1)

如果您使用的是Sonatype Nexus,则应考虑禁用“中央”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)。

答案 3 :(得分:0)

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

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