我不明白这为什么这么难:
在脚本中,我需要将一个工件从nexus复制到某个目录。使用Nexus REST API,我必须指定我不想知道的存储库。所以我尝试用maven-dependency-plugin的get目标来获取工件,效果很好。(在这种情况下,我从我们的nexus上的一个组中获得了它,其中包括版本和快照。)
然而,我现在在我的本地存储库中有了工件,并且相同插件的“复制”目标似乎无法从那里获得工件。真的有必要进入.m2文件夹并使用unix cp命令抓取那个jar吗?以前有没有人从他们的本地仓库复制过工件到其他目录?
或者,如果有人可以告诉我如何通过Nexus API获取工件,而不指定repo,那也可以。
发布于 2013-07-08 17:05:28
似乎问题出在我公司的_maven.repositories文件和特定的maven设置上。
我们不会将本地存储库的信息放入我们的settings.xml中。它都在我们所有项目使用的父pom中。但是,如果你想做一些纯粹的mvn-CLI魔术,你没有parent-pom,所以你必须自己提供本地repo的URL。这是可能的依赖:获取目标,这就是为什么我能够将我的工件从我们的Nexus下载到我的本地存储库。
但是,在使用copy时,不能指定URL。但我为什么要这么做呢?我刚把那个神器下载到我的本地仓库里了,对吧?
这就是_maven.repositories文件发挥作用的地方。即使使用-o开关,maven3也会查询该文件,该文件指定工件所来自的原始存储库。(感谢this thread中的人发布了他们的发现!)如果它不能到达repo,它会声明你的文件不在那里。(顺便说一句,这对我没有帮助。它应该说明原始repo不可访问,因此文件不会被复制。)
这就是为什么复制对我不起作用的原因。
只需将该文件重命名即可完成此操作。
不过,我将不得不研究一种更干净的解决方案。
让事情更复杂的是,我不能使用dependency:copy或dependency:copy-dependecies。出于某些原因,它们需要一个pom,而我的用例中没有这个。真正起作用的是org.apache.maven.plugins:maven-dependency-plugin:2.8:copy,我认为它应该是一样的,但那是另一回事。
感谢您的回答!
发布于 2013-07-04 22:42:24
我试过了,它对我很管用:
mvn dependency:copy-dependencies -DincludeArtifactIds=jcharts -DincludeGroupIds=jcharts -DoutputDirectory=/tmp/
这将工件jcharts:jcharts复制到/tmp/,它在执行此命令时位于我的本地(和远程)代码库中。
发布于 2013-07-04 23:05:28
如果你使用的是Sonatype Nexus,你应该考虑禁用“中心”as outlined in their book。
否则,根据@Keith,dependency:copy-dependency
会做你想做的事情。专门从远程存储库、as stated in the documentation下载dependency:get
您还可以通过在脱机模式下运行Maven来强制它不从非本地存储库l下载:-o
编辑
您还可以使用Maven Wagon Plugin将文件从本地存储库复制到任意目录。这应该不需要pom (但您可能需要提供jar的完整URL )。
https://stackoverflow.com/questions/17472575
复制相似问题