【问题标题】:Use ANT to update build number and inject into source code使用 ANT 更新内部版本号并注入源代码
【发布时间】:2011-03-27 06:36:15
【问题描述】:

在我的 build.xml 文件中,我正在增加属性文件中的构建版本号,如下所示:

<target name="minor">
     <propertyfile file="build_info.properties">
         <entry key="build.minor.number" type="int" operation="+" value="1" pattern="00" />
         <entry key="build.revision.number" type="int" value="0" pattern="00" />
     </propertyfile>
</target>

我也有类似的主要和修订条目。 (来自Build numbers: major.minor.revision

这很好用。现在我想把这个递增的内部版本号注入到我的源代码中:

    //Main.as
    public static const VERSION:String = "@(#)00.00.00)@";

通过使用:

<target name="documentVersion">
    <replaceregexp file="${referer}" match="@\(#\).*@" replace="@(#)${build.major.number}.${build.minor.number}.${build.revision.number})@" />
</target>

现在这种方法有效。它确实用过时的版本号替换了版本 but。因此,每当我运行 ANT 脚本时,build_info.properties 都会更新为正确的版本,但我的源代码文件使用的是预先更新的值。

我已经回显以检查在调用替换之前我确实在增加内部版本号,并且我注意到回显:

<echo>${build.minor.number}</echo> 
//After updating it still shows old non updated value here but the new value in the property file.

那么有没有办法在属性文件中检索更新的值,以便我可以使用它来注入我的源代码?

干杯

【问题讨论】:

标签: ant build-process


【解决方案1】:

 Project used to increment build number in build.properties file

 file parameters:
 version.number=                
 build.number=        

 if changes version.number then build.number starts from 1                                                      
 ====================================================================== -->

<property name="versionFileName" value="build.properties" />
<property file="${versionFileName}" />  
<property name="currentVersion" value="0.1.37"/>

<target name="calculate.version.build">
    <script language="javascript">
        <![CDATA[             
            var currentVersion = project.getProperty("currentVersion");
            var oldVersion = project.getProperty("version.number");
            var buildNumber = project.getProperty("build.number");

            if (!currentVersion.equals(oldVersion)){
                project.setProperty("currentBuild", 1);
            } else {
                var newBuildNumber = ++buildNumber;
                project.setProperty("currentBuild", newBuildNumber);
            }
        ]]> 
    </script>
</target>

<target name="update.version.build" depends="calculate.version.build">
    <propertyfile file="${versionFileName}">
        <entry key="build.number" type="int" operation="=" value="${currentBuild}" />
        <entry key="version.number" type="string" operation="=" value="${currentVersion}" />
    </propertyfile>
    <echo message="New version: ${currentVersion}.${currentBuild}" />
</target>

【讨论】:

  • 您应该提供一些解释,而不仅仅是剪切'n'粘贴代码作为答案,以获得高质量的答案。
【解决方案2】:

为什么不直接使用&lt;buildnumber/&gt;

【讨论】:

    【解决方案3】:

    所以在花了几个小时无法解决这个问题后,我发布了这个问题,然后在 20 分钟后解决了这个问题。

    问题是我在构建文件的顶部有这个:

    <property file="build_info.properties"/>
    

    我猜这是由于范围限定,并且属性是不可变的,因此我永远无法更新该值。删除该行,然后添加以下内容使其完美运行:

    <target name="injectVersion">
         <property file="build_info.properties"/>
         <replaceregexp file="${referer}" match="@\(#\).*@" replace="@(#)${build.major.number}.${build.minor.number}.${build.revision.number})@" />
    </target>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 2016-02-03
      • 2011-02-20
      • 1970-01-01
      • 2018-05-06
      相关资源
      最近更新 更多