Номера сборки: major.minor.revision

Используйте [Устаревший] Атрибут.

40
задан Dave Jarvis 5 May 2016 в 16:27
поделиться

5 ответов

Файл build_info.properties :

build.major.number=00
build.revision.number=00
build.minor.number=00

Файл build.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="current-number">

<property file="build_info.properties"/>
<property name="build.number" value="${build.major.number}.${build.minor.number}.${build.revision.number}"/>

<target name="current-number">
 <echo>Current build number:${build.number}</echo>
</target>

<target name="compile">
   <antcall target="revision"></antcall>
</target>

<target name="dist">
  <antcall target="minor"></antcall>
</target>

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

<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="major">
    <propertyfile  file="build_info.properties">
            <entry key="build.major.number" type="int" operation="+" value="1" pattern="00"/>
            <entry key="build.minor.number" type="int" value="0" pattern="00"/>
            <entry key="build.revision.number" type="int" value="0" pattern="00"/>
    </propertyfile>
</target>

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

</project>
54
ответ дан 27 November 2019 в 01:43
поделиться

Процесс сборки

  1. build_info.properties будет создан во время сборки в вашем проекте. папка Вы можете записать всю информацию о вашей сборке в этот файл.
    • Например, номер сборки, основной и дополнительный номера выпуска, отметка времени и номер версии.
  2. Сценарий сборки может измените эти значения, как бы то ни было хотите
  3. После успешной сборки зафиксируйте файл build_info.properties обратно в репозиторий

В процессе разработки

После первой сборки файл build_info.properties будет помещен в репозиторий. Вы можете изменить и зафиксировать любое число (старшие, второстепенные, номера сборки) самостоятельно, когда захотите, или увеличить его автоматически во время сборки, например build.number в приведенном ниже примере.

svnant Пример

Использование svnant 1.3.0:

<target name="checkout">
    <echo>Checking out revision ${param_SubProjectSvnREV} of project: ${param_SubProjectSvnName}</echo>
    <svn username="${svnant.repository.user}" password="${svnant.repository.passwd}">
        <checkout url="${svnant.latest.url}/${param_SubProjectSvnName}/" revision="${param_SubProjectSvnREV}" destPath="${all.projects.dir}/${param_SubProjectDirName}" />
        <info target="${all.projects.dir}/${param_SubProjectDirName}" ></info>
    </svn>
    <propertyfile  file="${all.projects.dir}/${param_SubProjectDirName}/build_info.properties" comment="Modify build numbers in a properties file.">
        <entry key="build.number" type="int" operation="+" value="1" pattern="00"/><!--increment it here -->
        <entry key="build.revision" type="string" value="${svn.info.rev}"/>
        <entry key="build.major.number" default="01"/><!-- can do some logic here to increase the values, or write value from somewhere else-->
        <entry key="build.minor.number" default="01"/><!-- can do some logic here to increase the values, or write value from somewhere else-->
    </propertyfile>
</target>

<target name="compile" depends="checkout">
    <property file="${all.projects.dir}/${param_SubProjectDirName}/build_info.properties" />
    <mkdir dir="${release.name}/${param_SubProjectDirName}/${build.major.number}.${build.minor.number}.${build.number}" />
    <!-- compile it to the new folder, an so on... -->
    <!-- after all, if the build wass successfull, commit the file 'build_info.properties' back to repository --> 
</target>
3
ответ дан 27 November 2019 в 01:43
поделиться

В моем проекте я не увеличиваю младший и старший номер автоматически. Мы устанавливаем его из наших глобальных свойств сборки. Примерно так:

<entry key="build.major.number" value="${global.release.major}"></entry> 
<entry key="build.minor.number" value="${global.release.minor}"></entry>

Это потому, что они будут изменены для выпусков (не для тестов или других сборок) и зафиксированы вместе с другими исходными кодами (мы сможем собрать старую версию или версию ветки).

Но если вы хотите увеличить младший номер, вы можете сделать это, как номер сборки в моем примере.

<entry key="build.major.number" type="int" operation="+" default="1" pattern="00"/>
0
ответ дан 27 November 2019 в 01:43
поделиться

Самый простой способ сделать это - решить проблему. Вместо того, чтобы заставлять сборку Any делать это за вас, попросите любой вызываемый вами процесс Ant вычислить номер версии, а затем передать его как свойство, например,

ant -Dbuild.version = 1.2.3

Это позволяет гибко использовать любую сборку, с которой вы работаете, с возможностью использовать ее реплику из чего угодно, например, из версии SVN, текущей даты и времени или чего-то еще.

ant -Dbuild.version = svnversion.

ant -Dbuild.version = date + "% Y% m% d% H% D"

ant -Dbuild.version = $ {major}. svnversion. . дата + "% Y% m% d% H% D"

и т. Д. При желании вы можете получить довольно полную информацию.

Если вы хотите иметь постоянно увеличивающееся число, затем вы можете сохранить его в файле, а затем передать его во время компиляции. Например, вы можете сделать:

VER = cat build.version ВЕР = $ ((ВЕР + 1)) echo $ VER> build.version

Наконец, если вы действительно хотите, чтобы это было в файле build.xml, лучше всего создать отдельную задачу для выполнения опции увеличения и сборки и разветвления вложенного муравей с вашей «основной» целью. Таким образом, вы получите

ant -> ant -Dbuild.version = 1.2.3.4 -> ...

Другими словами, учитывая ваш build.xml с (текущим) значением по умолчанию 'build', затем измените его на «версию» и попросите задачу «версия муравья» выполнить расчет, за которым следует вложенный вызов и сборка.

Реализация оставлена ​​в качестве упражнения для читателя, как и перевод подхода на платформу, отличную от UNIX. .

2
ответ дан 27 November 2019 в 01:43
поделиться

Это решение автоматически увеличивает младший номер или номер версии, если была выбрана цель компиляции или dist. Увеличение может быть отключено, если установлено одно из следующих свойств:

  • -Dno.increment.minor = true
  • -Dno.increment.revision = true

Если установлено свойство inc.major , то старший номер будет увеличиваться, а оба других значения будут установлены на ноль. Контрольная сумма SHA-1 вычисляется с помощью текстового представления файла версии.

Между прочим: Если бы это было разрешено, вы могли бы создать свою собственную задачу ant в java-скрипте, который включен в JDK 6.

А вот и файл ant

<?xml version="1.0" encoding="UTF-8"?>
<project name="Numbers" default="dist" basedir=".">

    <property name="version.file" location="${basedir}/version.properties"/>

    <target name="inc.revision.properties" unless="no.increment.revision">
        <propertyfile file="${version.file}">
            <entry key="minor.number" default="00" operation="=" pattern="00" type="int"/>
            <entry key="major.number" default="00" operation="=" pattern="00" type="int"/>
            <entry key="build.number" default="00" operation="+" pattern="00" type="int"/>
        </propertyfile>
    </target>

    <target name="inc.minor.properties" unless="no.increment.minor">
        <propertyfile file="${version.file}">
            <entry key="minor.number" default="00" operation="+" pattern="00" type="int"/>
            <entry key="major.number" default="00" operation="=" pattern="00" type="int"/>
            <entry key="build.number" value="00" operation="="  type="int"/>
        </propertyfile>
    </target>

    <target name="inc.major" if="inc.major">
        <property name="no.increment.minor" value="true" />
        <property name="no.increment.revision" value="true" />
        <propertyfile file="${version.file}">
            <entry key="minor.number" value="00" operation="=" pattern="00" type="int"/>
            <entry key="major.number" default="00" operation="+" pattern="00" type="int"/>
            <entry key="build.number" value="00" operation="=" pattern="00" type="int"/>
        </propertyfile>
        <load.version.info/>
    </target>

    <target name="inc.minor" depends="inc.major,inc.minor.properties">
        <property name="no.increment.revision" value="true"/>
        <load.version.info/>
    </target>

    <target name="inc.revision" depends="inc.major,inc.revision.properties">
        <load.version.info/>
    </target>

    <macrodef name="load.version.info">
        <sequential>
            <property file="${version.file}"/>
            <checksum file="${version.file}" property="sha1.number" algorithm="SHA" format="CHECKSUM"/>
            <echo>Version: ${major.number}.${minor.number}.${build.number}</echo>
            <echo>SHA1: ${sha1.number}</echo>
        </sequential>
    </macrodef>

    <target name="compile" depends="inc.revision" description="Compile Task"/>

    <target name="dist" depends="inc.minor, compile" description="Dest Task"/>

</project>
4
ответ дан 27 November 2019 в 01:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: