我在其他50个项目中拥有20个常春藤项目(由其他项目拥有),我在我的项目中使用了一些版本的二进制文件。
问题是在发布期间,我必须手动增加我的20个常春藤文件的版本,签入文件并构建二进制文件。这很费时间。虽然eclipse找到并替换了帮助。
自动使用ant的步骤:
1)单独检查常春藤文件。 2)使用脚本/逻辑来更改我的模块/我的模块相互依赖的版本。 3)签入文件。 4)标记分支以便发布。
坚持第2步休息一切都相对容易。
尝试了xml任务,但面临搜索的挑战,因为我们有时不知道确切的索引。
感谢您的帮助。
答案 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是一项非常聪明的任务,可根据您已发布的版本生成序列中的下一个数字。
另一个常春藤多模块提示是使用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>
以上解析和更改版本的目标。