【问题标题】:Automate ivy revision increase for all my projects using ant script使用 ant 脚本自动增加我所有项目的常春藤修订版
【发布时间】:2012-01-13 02:48:50
【问题描述】:

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

问题是在发布期间,我必须手动增加我的 20 个常春藤文件的版本,签入文件并构建二进制文件。这很耗时。虽然 eclipse find and replace 有帮助。

使用 ant 自动化的步骤:

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

卡在第 2 步休息都相对容易。

尝试过 xml 任务,但由于有时我们不知道确切的索引,因此在搜索方面面临挑战。

感谢您的帮助。

【问题讨论】:

  • 我不清楚您是在询问自己的修订号,还是您所指的依赖项之一。请记住,您始终可以在 ivy 描述符中使用 ant 属性,因此您可以使用它来指定您自己的修订版。
  • 感谢乔里。我指的是依赖文件的版本。

标签: java ant ivy


【解决方案1】:

如果您总是想使用最新版本,您是否考虑过使用version ranges in dependencies?将不再需要为新版本编辑文件。弹簧芯如下所示:

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

【讨论】:

  • 谢谢@Arne。我需要提供特定版本,因为我们的组装和发布服务器正在寻找它。
【解决方案2】:

您是否考虑过在您的 ivy 文件中使用 dynamic revision numbers

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

Ivy 将在发布到 ivy 存储库的 ivy.xml 文件中巧妙地解决这些依赖关系。

使用 ivy 生成内部版本号

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

控制构建顺序

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

解决动态修订

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

以下示例使用 ivy deliverma​​kepom 任务来创建扩展动态修订的 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>

【讨论】:

  • 谢谢@Mark。不能使用动态版本号。构建顺序已经处理完毕。
【解决方案3】:

自己找到了以下可行的解决方案,尽管尝试了其他选项,例如通过 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>

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

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2011-02-03
    • 2011-02-25
    • 1970-01-01
    • 2013-09-19
    • 2012-07-08
    • 2011-08-21
    • 2013-07-10
    • 2012-07-30
    相关资源
    最近更新 更多