Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ANT更新内部版本号并注入源代码_Ant_Build Process - Fatal编程技术网

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

使用ANT更新内部版本号并注入源代码,ant,build-process,Ant,Build Process,在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.revi

在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>
通过使用:

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

现在这一分类有效了。它确实取代了该版本,但版本号已过时。因此,每当我运行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.
${build.minor.number}
//更新后,它仍然在此处显示未更新的旧值,但在属性文件中显示新值。
那么,有没有一种方法可以检索属性文件中的更新值,以便我可以使用它来注入到我的源代码中呢


干杯

所以在花了几个小时没能解决这个问题后,我发布了这个问题,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>

为什么不直接使用

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



相关您应该提供一些解释,而不仅仅是剪切“n”粘贴代码作为答案,以获得高质量的答案。
 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>