使用ant脚本自动化我的所有项目的常春藤修订版本

时间:2011-12-05 10:37:50

标签: java ant ivy

我在其他50个项目中拥有20个常春藤项目(由其他项目拥有),我在我的项目中使用了一些版本的二进制文件。

问题是在发布期间,我必须手动增加我的20个常春藤文件的版本,签入文件并构建二进制文件。这很费时间。虽然eclipse找到并替换了帮助。

自动使用ant的步骤:

1)单独检查常春藤文件。 2)使用脚本/逻辑来更改我的模块/我的模块相互依赖的版本。 3)签入文件。 4)标记分支以便发布。

坚持第2步休息一切都相对容易。

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您是否考虑在常春藤文件中使用dynamic revision numbers

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

Ivy将巧妙地解决发布到常春藤存储库的ivy.xml文件中的这些依赖项。

使用常春藤生成buildnumber

buildnumber是一项非常聪明的任务,可根据您已发布的版本生成序列中的下一个数字。

控制构建顺序

另一个常春藤多模块提示是使用buildlist任务来控制模块的构建顺序。它基于每个子模块的常春藤文件中声明的相互依赖性工作。这样可以确保 latest.release latest.integration 修订版能够找到预期的版本。

解决动态修订

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

以下示例使用常春藤提交 makepom 任务来创建扩展了动态修订的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>

答案 1 :(得分:1)

如果您一直想使用最新版本,是否考虑过使用version ranges in dependencies?将不再需要编辑新版本的文件。弹簧核心看起来如下:

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

答案 2 :(得分:0)

自己找到了以下可行的解决方案,但尝试了其他选项,例如通过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文件夹的临时文件夹,以便cehckin正常工作。

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

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