【问题标题】:Convert ivy.xml to pom.xml将 ivy.xml 转换为 pom.xml
【发布时间】:2012-03-14 14:57:44
【问题描述】:

我有一个 ivy.xml - https://gist.github.com/1898060 我也有与这个 ivy.xml 相关的 jar 文件。 我需要一种机制来将此项目导入我的 maven 存储库并在我的 maven 项目中使用它。 所以基本上如果我能够将 ivy.xml 转换为 pom.xml ,我也许可以让它工作。 是否有某种机制可以实现这一目标。 我正在寻找类似 Maven 插件的东西来完成这项任务。 我知道有一些方法可以编辑 ivy.xml 和 build.xml 来实现这一点,但我不想这样做,因为该项目位于私人仓库中。

【问题讨论】:

    标签: java maven ivy


    【解决方案1】:

    您真正需要做的是将 ANT 项目构建的 jar 发布到您的 Maven 存储库中。

    ant -Dproject.version=0.9.0-local-20120211095554 clean publish
    

    我知道您不想更改 ANT 构建,但创建一个额外的“发布”目标将正确集成您的 ANT 和 Maven 项目。

    您修改后的 ANT 构建发布的两个 jar 工件可以按如下方式正常使用:

    <dependency>
        <groupId>com.opengamma</groupId>
        <artifactId>og-analytics</artifactId>
        <version>0.9.0-local-20120211095554</version>
    </dependency>
    
    <dependency>
        <groupId>com.opengamma</groupId>
        <artifactId>og-analytics</artifactId>
        <version>0.9.0-local-20120211095554</version>
        <classifier>sources</classifier>
    </dependency>
    

    对 ANT 版本的修改

    ivy.xml

    主要更改是您的出版物部分:

    <ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
        <info organisation="com.opengamma" module="og-analytics"/>
    
        <publications>
          <artifact name="og-analytics" type="jar"/>
          <artifact name="og-analytics" type="pom"/>
          <artifact name="og-analytics" type="jar" e:classifier="sources"/>
        </publications>
    
        <dependencies>
          <dependency name="og-util" rev="0.9.0-local-20120211095525" revConstraint="latest.integration"/>
    
          <dependency org="org.jfree" name="jfreechart" rev="1.0.13"/>
          <dependency org="cern" name="colt" rev="1.2.0"/>
          <dependency org="cern" name="parallelcolt" rev="0.9.1"/>
          <dependency org="latexlet" name="latexlet" rev="1.11"/>
          <dependency org="org.apache.commons" name="commons-math" rev="2.1"/>
    
          <dependency org="it.dexy" name="json-doclet" rev="0.3.1"/>
          <dependency org="org.json" name="simple" rev="1.1"/>
          <exclude org="org.junit"/>
        </dependencies>
    </ivy-module> 
    

    注意事项:

    • ANT 项目现在将发布 3 个文件,jar、源 jar 和 Maven POM
    • 在 Maven 源 jar 中有一个“分类器”属性设置为“源”(非源)。为方便起见,我们添加了ivy extra attribute
    • info 标记标题中不需要版本和状态信息。这将由发布步骤添加。

    build.xml

    <target name="prepare" description="Generate POM">
        <fail message="Unset property: project.version" unless="project.version"/>
    
        <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${project.version}" status="release"/>
    
        <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/>
    </target>
    
    <target name="publish" depends="build,prepare" description="Upload to Nexus">
        <ivy:publish resolver="nexus-deploy" pubrevision="${project.version}" overwrite="true" publishivy="false" >
            <artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/>
        </ivy:publish>
    </target>
    

    注意事项:

    • deliver 任务是可选的,但如果您的 ivy 文件包含动态修订,例如“latest.release”或“latest.integration”,建议使用。
    • makepoms 任务对将 ivy 配置转换为 Maven 范围具有强大的支持。不适用于您的情况,但可以激励您进一步了解常春藤:-)
    • publish 任务使用指定的模式来查找 ivy 发布部分中指定的文件。

    ivysettings.xml

    您可以在此处配置要由发布构建目标使用的存储库和凭据的位置。

    <ivysettings>
        <settings defaultResolver="nexus-central"/>
        <credentials host="somehost" realm="Sonatype Nexus Repository Manager" username="????" passwd="????"/>
        <resolvers>
            <ibiblio name="nexus-central" root="http://somehost/nexus/content/repositories/central/" m2compatible="true"/>
            <ibiblio name="nexus-deploy" root="http://somehost/nexus/content/repositories/repo" m2compatible="true"/>
        </resolvers>
    </ivysettings>
    

    注意事项:

    • Ivy 下载使用配置的默认解析器nexus-central
    • ivy 发布任务推送到名为 nexus-deploy 的 Nexus 存储库
    • 此示例中的安全领域与 Nexus Maven 匹配。对于其他回购经理来说会有所不同。

    【讨论】:

      【解决方案2】:

      Apache Ant 本身提供了一个任务来做到这一点 - makepom。总是有助于查阅文档!

      【讨论】:

      • 我不想编辑 build.xml 或 ivy.xml。我更喜欢使用一些脚本或工具来输入 ivy.xml 和 jar 并将带有正确 pom.xml 的 jar 安装到本地 maven repo 中。或者一个可以将本地 ivy repo 转换为 maven repo 的工具会很棒。
      • @Perception makepom 任务实际上是 Apache ivy 的一部分。 Ivy 是 ANT 的一个子项目。由于某些莫名其妙的原因,该 jar 未包含在标准 ANT 下载中,
      • 嗯,对不起,如果我的帖子不清楚,我认为使用 Ivy 的人都知道它是 Ant 的一部分。 @VineethMohan - makepom 任务从您的 ivy.XML 文件生成一个单独的 POM。但也请参阅 Mark 的出色回答。
      猜你喜欢
      • 2013-02-13
      • 2015-05-23
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2023-03-12
      • 2012-05-11
      • 2014-03-28
      相关资源
      最近更新 更多