2

我有本地文件系统 Ivy 存储库,需要将所有工件安装(发布)到远程 Maven 存储库,如 Nexus 或 Artifactory。我按照以下几行为ivy install 任务编写了 ant 脚本:

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

test现在,我的本地 ivy 存储库 ( , )中有多个配置compile,这些配置在 ivy.xml 文件中声明。本地存储库由每个工件、jars 和 ivys 两个文件夹组成。Jars 文件夹包含 jars,ivys 文件夹包含 ivy.xml,其中声明了配置。还存在 SHA 和 MD5 校验和文件,但仅此而已。

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

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

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

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

是否可以让 Ivy 尊重自己的 ivy.xml 并使用配置安装到 Nexus 或 Artifactory 存储库中,以便以后解决它们?

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

1 回答 1

2

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

简单回答是不。

ivy 如何解释 Maven 存储库

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

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

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

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

批量加载 Maven 存储库

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

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

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

希望这可以帮助。

于 2014-11-09T13:06:54.820 回答