代码之家  ›  专栏  ›  技术社区  ›  Allan

使用ANT更新内部版本号并注入源代码

  •  10
  • Allan  · 技术社区  · 14 年前

    <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>
    

    现在这类工作。它确实取代了这个版本 但是

    在调用replace之前,我已经进行了回音以检查是否确实在增加内部版本号,并且我注意到回音:

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

    干杯

    3 回复  |  直到 7 年前
        1
  •  11
  •   Allan    14 年前

    所以,在花了几个小时没能解决这个问题之后,我发布了这个问题,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>
    
        2
  •  1
  •   Øyvind Nordhagen    12 年前

    为什么不用呢 <buildnumber/> ?

        3
  •  0
  •   Denis Danilkovich    11 年前

     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>