maven - ivy 可以从 Maven 存储库安装和检索配置吗?

标签 maven repository ivy buildconfiguration

我有本地文件系统 Ivy 存储库,需要将所有 Artifact 安装(发布)到远程 Maven 存储库(例如 Nexus 或 Artifactory)中。我为ivy写了ant脚本install task大致如下:

<ivy:install 
    organisation="apache" 
    module="commons-lang" 
    revision="2.0" 
    from="ivyfilesys" to="remotemaven"/>

现在,我的本地 ivy 存储库中有多个配置(测试编译),这些配置在存在的 ivy.xml 文件中声明。本地存储库包含每个 Artifact 的两个文件夹:jars 和 ivys。 Jars 文件夹包含 jars,ivys 文件夹包含 ivy.xml,其中声明了配置。此外,SHA 和 MD5 校验和文件也存在,但没有其他文件。

我预计 Ivy 会告诉 Maven 存储库可用的配置,但似乎没有。在我切换到新创建的存储库进行解析后,Ivy 找不到它刚刚安装在那里的 Artifact ,声称缺少 testcompile 配置。

本地存储库配置为基于文件,并且可以从那里解决 Artifact ,没有问题。远程存储库与 ibiblio、m2 兼容:

<ibiblio name="remotemaven" m2compatible="true"
      root="http://my.server:8081/"
      pattern="[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
/>

根已配置到我们的服务器。当安装的 Artifact 出现在服务器上时,根和身份验证可能已正确配置。

有没有一种方法可以让 Ivy 尊重它自己的 ivy.xml 并通过配置安装到 Nexus 或 Artifactory 存储库中,以便稍后可以解决它们?

  • 也许 ivy:install 任务需要更多选项?
  • 也许某些配置文件丢失或不完整?

最佳答案

Can ivy install and retrieve configurations from Maven repository?

简单的答案是否定的。

ivy 如何解释 Maven 存储库

Maven 不支持 Ivy 的配置概念。最接近的比较是 Maven“范围”。这些是固定的, Ivy 的 ibiblio resolver了解如何将它们映射到配置中。下面的答案有更详细的描述:

ivy 如何将文件推送到 Maven 存储库

将 Artifact 发布到 Maven 存储库时,您还必须生成 Maven 元数据文件:pom.xml。 makepom task允许您指定特定 Maven 范围应使用哪些 ivy 配置。以下答案可能有用:

Ivy 不限于固定数量的范围。虽然 ivy 配置更加灵活,但您不能假设每个配置都用于填充标准项目类路径......

批量加载 Maven 存储库

因此,总而言之,将文件从本地 ivy 存储库批量传输到 Maven 存储库并非易事,原因如下:

  1. 将 ivy 文件转换为 Maven POM 可能很困难。 Ivy 的配置与 Maven 作用域的工作方式并不完全相同。
  2. 您的本地存储库可能包含 Maven Central 中已有的文件,因此实际上不需要显式上传。

根据我的经验,最大的问题是大量的第 3 方 jar 没有记录它们来自哪里。为了帮助 Maven 化新项目,我开发了一个 groovy 脚本,该脚本使用 Nexus 搜索 API 在 Maven 中央数据库中查找匹配记录。一般来说,这种方法可以将本地存储的 jar 数量减少多达 80%。

希望这有帮助。

关于maven - ivy 可以从 Maven 存储库安装和检索配置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826617/

相关文章:

java - 错误 : java. lang.ClassNotFoundException : org. apache.mahout.common.RandomWrapper

c# - XML 存储库实现

ant - 收到错误消息 : "unknown resolver XYZ"

asp.net-mvc - 真实世界的 ASP.NET MVC 存储库

c# - 从泛型类派生的类中缺少构造函数

gradle - 将Ivy转换为Gradle-依赖语法

gradle - 自定义PublishToIvyRepository任务中存储库的语法是什么?

maven - 运行彼此隔离的集成测试

plugins - 带有ssl问题的Weblogic maven插件

java - 如何使用 VSCode 执行没有 main 方法的 java 程序?