2011-12-05 21 views
1

我在50个其他项目中拥有20个常春藤项目(由他人拥有),我在我的项目中使用了它们的二进制文件的某些版本。使用蚂蚁脚本为我所有的项目自动化常春藤修订版增加

问题是在发布期间,我不得不手动增加我的20个ivy文件的版本,检入文件并构建二进制文件。这是耗时的。虽然日食发现和替换的帮助。

使用蚂蚁自动化的步骤:

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

卡在第2步休息都比较容易。

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

感谢您的帮助。

+0

对于我来说,如果您询问自己的修订版编号或您所指的某个依赖关系,我不清楚。请记住,您始终可以在常春藤描述符中使用ant属性,因此您可以使用它来指定您自己的修订版。 –

+0

谢谢Joeri。我指的是依赖文件的版本。

回答

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> 

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

1

如果你总是想使用最新版本,你有没有想过使用version ranges in dependencies?将不再需要编辑新版本的文件。它看起来像下面的弹簧芯:

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

Thanks @Arne。我需要给出特定的版本,因为我们的汇编和发布服务器正在寻找它。 –

3

你有没有考虑过用你的ivy文件的dynamic revision numbers

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

常春藤会巧妙地解决发布到常青藤存储库的ivy.xml文件中的这些依赖关系。

使用ivy产生buildnumber

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

控制生成顺序

另一个常春藤多模块技巧是使用buildlist任务要控制你的模块的构建顺序。它基于每个子模块的常青藤文件中声明的相互依赖性。这确保latest.leaselatest.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> 
+0

谢谢@Mark。不能使用动态版本号。建立秩序已经被照顾。 –