Используйте ANT для обновления номера сборки и вставки в исходный код - PullRequest
10 голосов
/ 09 августа 2010

В моем файле 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>

У меня также есть похожие записи для основной и ревизии.(из Номера сборки: 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>

Теперь эта сортировка работает.Он действительно заменяет версию , но устаревшим номером версии.Поэтому всякий раз, когда я запускаю сценарий 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.

Так есть ли способ получить обновленное значение в файле свойств, чтобы я мог использовать его для вставки в мой исходный код?

Приветствия

Ответы [ 3 ]

11 голосов
/ 09 августа 2010

Поэтому, потратив часы на то, чтобы решить эту проблему, я отправляю этот вопрос, а затем выясняю его через 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>
1 голос
/ 24 февраля 2012

Почему бы просто не использовать <buildnumber/>?

0 голосов
/ 08 октября 2013

 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>

...