使用ant脚本自动化我所有项目的ivy修订增加



我拥有50个其他项目中的20个ivy项目(由其他人拥有),我在我的项目中使用他们的一些二进制版本。

问题是在发布期间,我必须手动增加我的20个ivy文件的版本,签入文件并构建二进制文件。这很耗时。虽然eclipse查找和替换有帮助。

自动化使用ant的步骤:

1)单独检出ivy文件。2)使用脚本/逻辑更改版本,只有我的模块/我的模块相互依赖。3)检查文件。4)标记分支以发布。

停留在第二步休息都相对容易。

尝试xml任务,但在搜索时遇到挑战,因为我们有时不知道确切的索引。

谢谢你的帮助。

您考虑过在ivy文件中使用动态修订号吗?

<dependency org="myorg" name="myname1" revision="latest.release"/>
<dependency org="myorg" name="myname2" revision="latest.integration"/>

Ivy将巧妙地在Ivy .xml文件中解析这些依赖关系,该文件发布到Ivy存储库中。

使用ivy生成buildnumber

buildnumber是一个非常聪明的任务,它根据你已经发布的版本,按顺序生成下一个数字。

控制构建顺序

另一个ivy多模块技巧是使用buildlist任务来控制模块构建的顺序。它基于在每个子模块的ivy文件中声明的相互依赖关系工作。这确保了是最新的。releaselatest.integration修订版将找到期望的修订版。

解析动态修订

正如我所说的,这通常是自动完成的,但有时您需要实际看到使用的实际版本,例如在生成Maven POM文件时(当发布到Maven repo时)。

下面的例子使用ivy delivermakepom任务来创建一个扩展了动态修订的Maven POM。
<target name="generate-pom">
    <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="${publish.status}"/>
    <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/>
</target>
<target name="publish" depends="build,generate-pom">
    <ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true" publishivy="false" >
        <artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/>
    </ivy:publish>
</target>

如果您总是想使用最新版本,您是否考虑过在依赖项中使用版本范围?将不再需要为新版本编辑文件。对于弹簧芯,它看起来如下所示:

<dependency org="org.springframework" name="spring-core" rev="[2.5,4.0[" conf="optional->default"/>

我自己找到了以下可行的解决方案,尽管尝试了其他选项,如通过IVY java解析IVY .xml等

<target name="autoincrementivy" depends="prompt-user.password">
    <exec executable="svn" failonerror="${svn.failonerror}">
        <arg value="--non-interactive"/>
        <arg value="--trust-server-cert"/>
        <arg value="--username"/>
        <arg value="${svn.user}"/>
        <arg value="--password"/>
        <arg value="${svn.password}"/>
        <arg value="checkout"/>
        <arg value="--depth"/>
        **<arg value="immediates"/>**
        <arg value="${svn.repository}/@{module.name}/trunk"/>
         <arg value="${temp.checkout.dir}/@{module.name}"/>
    </exec>
<move file="${temp.checkout.dir}/ivy.xml" tofile="${temp.checkout.dir}/ivy_src.xml"/>
<ant target="changeVersion" antfile="../deploy.xml" >
   <property name="dest.file" value="${temp.checkout.dir}/ivy.xml"/>
  <property name="src.file" value="${temp.checkout.dir}/ivy_src.xml"/>
  <property name="target.version" value="${tag.version}"/>
</ant>
<!-- cehckin the file-->
</target>

上面的任务将文件签出到一个带有.svn文件夹的临时文件夹,以便签入可以正常工作。

    <target name="changeVersion">
    <xmltask source="${src.file}" dest="${dest.file}" preserveType="true" >
        <replace path="/ivy-module/info/@revision" withText="${target.version}" />
        <replace path="/ivy-module/dependencies/dependency[@name='my-common']/@rev"       withText="${target.version}" /> 
<replace path="/ivy-module/dependencies/dependency[@name='my-gui-common']/@rev" withText="${target.version}" /> 
        </xmltask>  
        <fixcrlf file="${src.file}" eol="cr" />
    </target>

上面的目标是解析和更改版本。

相关内容

  • 没有找到相关文章