将ivy.xml转换为pom.xml

我有一个ivy.xml – https://gist.github.com/1898060我也有这个ivy.xml相关的jar文件。 我需要的是一个机制,将这个项目导入到我的Maven回购,并在我的Maven项目中使用它。 所以基本上,如果我能够将ivy.xml转换为pom.xml,我可能能够得到它的工作。 有什么机制可以通过我来达到这个目的。 我正在寻找像maven插件来完成这个任务。 我知道有一些方法可以编辑ivy.xml和build.xml来达到这个目的,但是我不想这样做,因为这个项目是在一个私人仓库中。

你真正需要做的是将由ANT项目构build的jar发布到你的Maven仓库中。

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

我知道你不想改变ANT构build,但创build一个额外的“发布”目标将正确地整合你的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中有一个“分类器”属性设置为“来源”(非源)。 为了方便这个,我们添加一个常青藤额外的属性 。
  • 信息标签标题中不需要版本和状态信息。 这将在发布步骤中添加。

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> 

笔记:

  • 交付任务是可选的,但build议您的常青藤文件包含dynamic修订,如“latest.release”或“latest.integration”。
  • makepoms任务有强大的支持将常春藤configuration转换成Maven范围。 不适用于你的情况,但是更多地了解常春藤的动机:-)
  • 发布任务使用指定的模式来查找ivy的发布部分中指定的文件。

ivysettings.xml

这是您configuration发布构build目标所使用的存储库和凭据的位置的位置。

 <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> 

笔记:

  • 常春藤下载使用configuration的默认parsing器nexus-central
  • 常春藤发布任务推送到名为nexus-deploy的Nexus存储库
  • 这个例子中的安全领域与Nexus Maven相匹配。 对于其他回购pipe理人员会有所不同。

Apache Ant本身提供了一个这样做的任务 – makepom 。 总是有助于咨询文件!