如何使用 maven 从 ivy 存储库下载工件

Posted

技术标签:

【中文标题】如何使用 maven 从 ivy 存储库下载工件【英文标题】:How to download artifacts from ivy repository using maven 【发布时间】:2012-09-30 21:25:49 【问题描述】:

我们正在从 ivy 转向 maven。我们在工件中有很多使用 ivy 发布的工件,因此工件文件夹/路径结构类似于

    artifactory/libs-release/[organization]/[module]/[revision]/[type]s/[module](-[classifier]).[ext]

    artifactory/libs-release/[organization]/[module]/[revision]/[type]s/ivy.xml

但是,当我们在 maven pom.xml 中添加依赖项时,依赖项名称将类似于 com.abc.xyz。但是 maven 会尝试查看路径 com/abc/xyz/ 文件夹,而我们在 com.abc.xyz/my-artifact/1.0.0/jars/my-artifact.jar 中拥有 artifactory 中的工件

我如何告诉 maven (pom.xml) 阅读和理解工件中的路径。

我尝试使用 ivy-maven-plugin,但它为某些 groovy 类提供了 classNotFound 错误,即使我在本地 m2 存储库文件夹中需要 groovy jar。

* 回答 好的,这就是我们所做的。我们手动创建了文件夹,然后我们现在使用 makepom 插件将 ivy.xml 转换为 maven pom.xml 感谢您的所有建议,欢迎提出更多建议。

【问题讨论】:

能否将存储库布局更改为 maven 2 布局或创建虚拟布局? wiki.jfrog.org/confluence/display/RTF/Repository+Layouts 同意改变布局是最好的方法。常春藤支持 Maven,不幸的是不是相反 :-) 谢谢和马克。我们希望避免更改存储库布局,因为我们现在正处于开发周期的中间,而且其他团队也开发了许多组件。因此,我们对破坏他们的构建持怀疑态度。 【参考方案1】:

您为什么要尝试将 Maven 融入 Ivy。 Ivy 在那里利用和模仿当时 Maven 已经拥有的东西。

由于 Ivy 可以读取 Maven 存储库,但不能相反,我建议您使用 Nexus 或 Artifactory 设置自己的本地网络(或公司)Maven 存储库。然后您可以将工件一一上传到那里,并将这些 Ivy 构建标准化以指向新的 Maven 存储库。 这在开始时需要一些额外的努力,但我相信它会在以后得到回报。

还有另一种选择,将 Maven 配置为读取非标准存储库布局,但您为什么要走那条路呢?一旦你选择了这条路,一切都会变得更加困难。

【讨论】:

谢谢。我们发现 Maven 文档与 ivy 相比。同样在其他一些工具/等中,例如 Artifactory,他们总是给出 Maven 的例子,但在 ivy 上没有那么多。尽管我们从项目一开始就开始使用 ivy,但我们在晚上工作时一直在努力获得 ivy 和 artifactory。所以,我们决定迁移到 Maven。我在过去的公司中使用过 maven,并且我发现它在有良好文档的情况下工作得更好。 好的。看来Maven比较主流,遇到问题会更容易找到帮助。【参考方案2】:

看看我的Ivy integration package。 jar.macro 特别方便,因为它会在您构建 jar 时自动构建 pom.xml。该宏与jar 任务非常相似。

我所做的是使用我的每个 jar 构建 pom.xml,然后使用 mvn deploy:deploy-file 将我的 jar 部署到 Maven 存储库。

mvn deploy:deploy-file -Dfile=$jar_file
    -D pomFile=pom.xml
    -D repositoryId=$repo_id
    -D url=$repo_url

【讨论】:

以上是关于如何使用 maven 从 ivy 存储库下载工件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Sonatype Nexus 作为 Ivy 依赖项的镜像 [重复]

如何在公共 Maven/Ivy 存储库中搜索特定类?

如何让 sbt 使用本地 Maven 代理存储库(Nexus)?

将工件从一个 Ivy 存储库发布/复制到另一个存储库

如何从 Maven 存储库中找到最新版本的工件

使用 IVY 将 SNAPSHOT 工件发布到 Maven - 有啥魔力?