Java 使用ant脚本为我的所有项目自动增加常春藤版本
在50个其他项目中,我拥有20个常春藤项目(由他人拥有),我在项目中使用了他们的二进制文件的一些版本 问题是在发布期间,我必须手动增加我的20个常春藤文件的版本,签入文件并构建二进制文件。这很费时。尽管eclipse查找和替换有帮助 使用ant实现自动化的步骤: 1) 单独检查常春藤文件。 2) 使用脚本/逻辑仅更改我的模块/我的模块相互依赖的版本。 3) 签入文件。 4) 标记要释放的分支 停留在步骤2休息都相对容易 尝试了xml任务,但在搜索方面面临挑战,因为有时我们不知道确切的索引Java 使用ant脚本为我的所有项目自动增加常春藤版本,java,ant,ivy,Java,Ant,Ivy,在50个其他项目中,我拥有20个常春藤项目(由他人拥有),我在项目中使用了他们的二进制文件的一些版本 问题是在发布期间,我必须手动增加我的20个常春藤文件的版本,签入文件并构建二进制文件。这很费时。尽管eclipse查找和替换有帮助 使用ant实现自动化的步骤: 1) 单独检查常春藤文件。 2) 使用脚本/逻辑仅更改我的模块/我的模块相互依赖的版本。 3) 签入文件。 4) 标记要释放的分支 停留在步骤2休息都相对容易 尝试了xml任务,但在搜索方面面临挑战,因为有时我们不知道确切的索引 感谢您
感谢您的帮助。如果您一直想使用最新版本,是否考虑过使用?将不再需要为新版本编辑文件。spring core的外观如下所示:
<dependency org="org.springframework" name="spring-core" rev="[2.5,4.0[" conf="optional->default"/>
如果您一直想使用最新版本,是否考虑过使用?将不再需要为新版本编辑文件。spring core的外观如下所示:
<dependency org="org.springframework" name="spring-core" rev="[2.5,4.0[" conf="optional->default"/>
您是否考虑过在您的常春藤文件中使用
<dependency org="myorg" name="myname1" revision="latest.release"/>
<dependency org="myorg" name="myname2" revision="latest.integration"/>
Ivy将在发布到Ivy存储库的Ivy.xml文件中巧妙地解决这些依赖关系
使用常春藤生成buildnumber
这是一个非常聪明的任务,它根据您已经发布的版本生成序列中的下一个数字
控制构建顺序
另一个常春藤多模块技巧是使用任务来控制模块的构建顺序。它基于每个子模块的ivy文件中声明的相互依赖关系工作。这确保了最新的.release和最新的.integration版本将找到预期的版本
解决动态修订
正如我所说,这通常是自动完成的,但有时您需要实际查看使用的真实版本,例如,在生成Maven POM文件时(发布到Maven repo时)
以下示例使用ivydeliver和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>
您是否考虑过在您的常春藤文件中使用
<dependency org="myorg" name="myname1" revision="latest.release"/>
<dependency org="myorg" name="myname2" revision="latest.integration"/>
Ivy将在发布到Ivy存储库的Ivy.xml文件中巧妙地解决这些依赖关系
使用常春藤生成buildnumber
这是一个非常聪明的任务,它根据您已经发布的版本生成序列中的下一个数字
控制构建顺序
另一个常春藤多模块技巧是使用任务来控制模块的构建顺序。它基于每个子模块的ivy文件中声明的相互依赖关系工作。这确保了最新的.release和最新的.integration版本将找到预期的版本
解决动态修订
正如我所说,这通常是自动完成的,但有时您需要实际查看使用的真实版本,例如,在生成Maven POM文件时(发布到Maven repo时)
以下示例使用ivydeliver和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>
我自己找到了以下可行的解决方案,但尝试了其他选项,如通过IvyJava解析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>
上面的目标是解析和更改版本。我自己找到了以下可行的解决方案,但尝试了其他选项,如通过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>
上面的目标是解析和更改版本。我不清楚您是询问自己的修订号,还是您所指的依赖项之一。请记住,您始终可以在常春藤描述符中使用ant属性,因此您可以使用它来指定自己的修订版。谢谢Joeri。我指的是依赖项文件的版本。我不清楚您是否询问自己的修订号,或者您所指的依赖项之一。请记住,您始终可以在常春藤描述符中使用ant属性,因此您可以使用它来指定自己的修订版。谢谢Joeri。我指的是依赖项文件的版本。谢谢@Arne。我需要提供特定的版本,因为我们的程序集和发布服务器正在查找它。谢谢@Arne。我需要提供特定的版本,因为我们的程序集和发布服务器正在查找它。谢谢@Mark。无法使用动态版本号。建造顺序已经处理好了。谢谢@Mark。无法使用动态版本号。建造顺序已经处理好了。