我拥有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文件中声明的相互依赖关系工作。这确保了是最新的。release和latest.integration修订版将找到期望的修订版。
解析动态修订
正如我所说的,这通常是自动完成的,但有时您需要实际看到使用的实际版本,例如在生成Maven POM文件时(当发布到Maven repo时)。
下面的例子使用ivy deliver和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="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>
上面的目标是解析和更改版本。