如何使用Maven从Ivy仓库下载构件。

8
我们正在从ivy转移到maven。我们在artifactory中有许多使用ivy发布的工件,因此工件文件夹/路径结构类似于
1. artifactory/libs-release/[organization]/[module]/[revision]/[type]s/[module](-[classifier]).[ext] 2. artifactory/libs-release/[organization]/[module]/[revision]/[type]s/ivy.xml
然而,在maven pom.xml中添加依赖项时,依赖项名称将类似于com.abc.xyz。但是,maven尝试查看com/abc/xyz/文件夹,而我们在artifactory中的工件位于com.abc.xyz/my-artifact/1.0.0/jars/my-artifact.jar 我该如何告诉maven(pom.xml)阅读和理解artifactory中的路径。
我尝试使用ivy-maven-plugin,但它会为某些groovy类给出classNotFound错误,即使我在本地m2存储库文件夹中需要groovy jars。
答案:好的,这就是我们所做的。我们手动创建了文件夹,然后现在使用makepom插件将ivy.xml转换为maven pom.xml。感谢您的所有建议,更多意见仍然欢迎。

你能把仓库布局改成Maven 2布局或者创建虚拟布局吗?http://wiki.jfrog.org/confluence/display/RTF/Repository+Layouts - oers
同意更改布局是最好的方法。Ivy支持Maven,但反过来不行 :-) - Mark O'Connor
感谢oers和Mark。我们想避免改变仓库布局,因为我们现在正在开发周期中,并且还有许多其他团队开发的组件。因此,我们对破坏他们的构建持怀疑态度。 - S S
2个回答

4
为什么要试图将Maven适配到Ivy中。当时Ivy是为了利用和模仿Maven所拥有的东西而存在的。
由于Ivy可以读取Maven仓库,但反过来不行,我建议您设置自己的本地网络(或公司)Maven仓库,使用Nexus或Artifactory。然后,您可以一个一个地上传这些构件,并将那些Ivy构建标准化,指向该新的Maven仓库。
这需要一些额外的努力,但我相信它以后会得到回报。
还有另一种选择,就是配置Maven读取非标准仓库布局,但为什么要选择这条路呢?一旦选择这条路,所有事情都会变得更加困难。

1
谢谢。我们发现Maven文档与Ivy相比更好。此外,在其他一些工具/等中,例如Artifactory,他们总是给出Maven的示例,但对于Ivy并不多。尽管我们从项目开始就使用了Ivy,但我们仍然在努力让Ivy和Artifactory正常工作。因此,我们决定转向Maven。我在过去的公司中使用过Maven,并且看到它有更好的文档可用,而且运行得更好。 - S S
1
好的。看起来Maven更加主流,当你遇到问题时,更容易找到帮助。 - Daniel Baktiar

3
请看我的 Ivy 集成包jar.macro 特别方便,因为它会在构建 jar 时自动构建 pom.xml。该宏与 jar 任务非常相似。
我的做法是使用每个 jar 构建 pom.xml,然后使用 mvn deploy:deploy-file 将我的 jars 部署到 Maven 存储库中。
mvn deploy:deploy-file -Dfile=$jar_file
    -D pomFile=pom.xml
    -D repositoryId=$repo_id
    -D url=$repo_url

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接