【问题标题】:How to publish an Ivy project with multiple classifiers?如何发布具有多个分类器的 Ivy 项目?
【发布时间】:2013-01-14 15:46:26
【问题描述】:

我来自 Maven 背景。我正在从事的项目不是基于 Java 的。但是,需要使用独立的 Ivy 进行依赖管理。存储库管理器是 Nexus。

该项目产生了几个 zip 工件,需要通过独立的 Ivy 将它们部署到 Nexus。我想要一个 Maven 分类器的类似物,但对于 Ivy。

这是我的 ivysettings.xml:

<ivysettings>
    <settings defaultResolver="nexus"/>
        <credentials host="localhost"
                     realm="Sonatype Nexus Repository Manager"
                     username="user"
                     passwd="pass"/>

    <property name="nexus-public"
              value="http://localhost:8081/nexus/content/groups/public"/>
    <property name="nexus-releases"
              value="http://localhost:8081/nexus/content/repositories/releases"/>
    <property name="nexus-snapshots"
              value="http://localhost:8081/nexus/content/repositories/snapshots"/>

    <resolvers>
        <ibiblio name="nexus"
                 m2compatible="true"
                 root="${nexus-public}"/>
        <ibiblio name="nexus-releases"
                 m2compatible="true"
                 root="${nexus-releases}"/>
        <ibiblio name="nexus-snapshots"
                 m2compatible="true"
                 root="${nexus-snapshots}"
                 checkmodified="true"
                 changingPattern="*-SNAPSHOT"/>
    </resolvers>
</ivysettings>

我有以下 ivy.xml:

<ivy-module version="2.0">
    <info organisation="kung.fu" module="ninja" revision="1.2.3"/>

    <publications>
        <artifact name="ninja" type="zip" ext="zip"/>
        <artifact name="ninja" type="win32" ext="zip"/>
        <artifact name="ninja" type="linux-x32" ext="zip"/>
        <artifact name="ninja" type="linux-x64" ext="zip"/>
    </publications>
</ivy-module>

我正在尝试按如下方式部署到 Nexus:

java -jar /path/to/ivy.jar
     -settings /path/to/.ivy/ivysettings.xml
     -ivy ivy.xml
     -publish nexus-releases
     -publishpattern "target/[artifact]-[revision](-[classifier]).[ext]"
     -revision 1.2.3
     -status released
     -overwrite

我做错了什么?

【问题讨论】:

    标签: ivy nexus


    【解决方案1】:

    我认为您缺少用于分类器字段的特殊 extra attribute

    此外,您还需要生成和上传 Maven POM 文件。不幸的是命令行工具不支持这个...

    见:

    更新

    独立 jar 旨在支持发布到存储库,但隐含的理解是它是一个 ivy 存储库....

    这解释了为什么要推送 ivy 文件,它是 ivy 模块所需的模块元数据文件。另一方面,Maven 使用 POM 文件作为其模块元数据,这需要创建并发布到 Maven 存储库。

    如果您在 ANT 中执行所有这些操作,您将拥有 makepom 任务来自动生成 POM 文件,而 ivy publish 任务有一个“publishivy”属性,可用于禁止上传 ivy .xml 文件。

    【讨论】:

    • 非常感谢!关于额外属性的部分并没有从他们的文档中立即清楚。
    • 为什么需要发布 pom 文件?还有...为什么 Ivy 要将 ivy.xml 文件上传到 Nexus?
    • @carlspring 答案已更新。您是否考虑过使用 groovy 脚本而不是独立的 jar? Groovy 与 ANT 的集成非常好,可以直接调用 ivy 任务。如果您有兴趣发布一个新问题,我可以扩展。示例:stackoverflow.com/questions/3955209/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多