我有本地文件系统 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 ,声称缺少 test
和 compile
配置。
本地存储库配置为基于文件,并且可以从那里解决 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 配置。以下答案可能有用:
- Convert ivy.xml to pom.xml
- how to publish 3rdparty artifacts with ivy and nexus
- Publishing multiple artifacts to maven repository using ivy
- Ivy makepom marks all dependencies as optional despite mapping
Ivy 不限于固定数量的范围。虽然 ivy 配置更加灵活,但您不能假设每个配置都用于填充标准项目类路径......
批量加载 Maven 存储库
因此,总而言之,将文件从本地 ivy 存储库批量传输到 Maven 存储库并非易事,原因如下:
- 将 ivy 文件转换为 Maven POM 可能很困难。 Ivy 的配置与 Maven 作用域的工作方式并不完全相同。
- 您的本地存储库可能包含 Maven Central 中已有的文件,因此实际上不需要显式上传。
根据我的经验,最大的问题是大量的第 3 方 jar 没有记录它们来自哪里。为了帮助 Maven 化新项目,我开发了一个 groovy 脚本,该脚本使用 Nexus 搜索 API 在 Maven 中央数据库中查找匹配记录。一般来说,这种方法可以将本地存储的 jar 数量减少多达 80%。
希望这有帮助。
关于maven - ivy 可以从 Maven 存储库安装和检索配置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826617/