for descargar java ant build-process versioning

java - descargar - Números de construcción: major.minor.revision



apt get install ant version (7)

¿Cómo escribiría un archivo build.xml , sin usar código personalizado ni dependencias externas (como un script de shell), que:

  • Genera un número de compilación de la forma major.minor.revision (por ejemplo, 01.02.34 ).
  • Incrementa automáticamente la revisión en cada compilación del código fuente.
  • Incrementa automáticamente la versión secundaria en cada ejecución de una tarea dist (ribution).

Adicionalmente:

  • Proporciona una opción para incrementar el número mayor.
  • Proporciona una opción para incrementar el número menor.
  • Cada vez que se incrementa el número mayor, los números menor y de revisión se establecen en 0.
  • Cada vez que se incrementa el número menor, el número de revisión se establece en 0.

Prima:

  • Crea una variable basada en el número de revisión de git (como un número de revisión de subversión).

Aclaración:

  • No se requiere checkout (o commit) automático.
  • No se desea la integración con Subversion.

Gracias por cualquier ejemplo. Aquí hay algunos sitios relacionados que describen cómo realizar tareas similares:


Proceso de construcción

  1. build_info.properties se creará durante la compilación en la carpeta de su proyecto. Puede escribir toda la información sobre su compilación en este archivo.
    • Al igual que el número de compilación, los números mayor y menor de lanzamiento, marca de tiempo y número de revisión.
  2. Tu script de construcción puede modificar estos valores como quieras.
  3. Después de que la construcción fue exitosa, confirme el archivo ''build_info.properties'' en el repositorio

Durante el desarrollo

Después de la primera compilación, el archivo build_info.properties se colocará en el repositorio. Puede cambiar y confirmar cualquier número (mayor, menor, números de compilación) por sí mismo cuando lo desee, o aumentarlo automáticamente durante la compilación como build.number en el siguiente ejemplo.

Ejemplo de svnant

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


El archivo build_info.properties :

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

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


En mi proyecto no aumento el número menor y mayor automáticamente. Lo configuramos desde nuestras propiedades de construcción globales. Como eso:

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

Esto se debe a que se cambiarán para las versiones (no para pruebas u otras versiones) y se confirmarán junto con otras fuentes (hemos podido compilar algunas versiones antiguas o de rama).

Pero si desea aumentar el número menor, puede hacerlo como el número de compilación en mi ejemplo.

<entry key="build.major.number" type="int" operation="+" default="1" pattern="00"/>


Esta solución incrementa automáticamente el número menor o el número de revisión si se ha seleccionado una compilación o un destino dist. El incremento se puede desactivar si se ha establecido una de las siguientes propiedades:

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

Si se ha establecido la propiedad inc.major, el número mayor se incrementará y los otros valores se establecerán en cero. La suma de comprobación SHA-1 se calcula mediante la representación textual del archivo de versión.

Por cierto: si se hubiera permitido, podría crear su propia tarea ant en el script java, que se incluye en JDK 6.

Ahora aquí está el archivo 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>


Esto fue hace un tiempo, así que esto es de memoria:

Construyo un bloque personalizado de etiquetadora CruiseControl.Net que marcó el número de compilación en cada compilación. Mantuvo un archivo XML con los 4 componentes del número de versión e identificó cada proyecto por su nombre (por lo que podría admitir múltiples proyectos).

Los cuatro valores que generó pasan al proceso de compilación (nAnt, en nuestro caso), que tenía la responsabilidad de ajustar todos los archivos AssemblyInfo.cs para reflejar el número de compilación adecuado.

Editado para tener en cuenta: el único valor que se marca automáticamente es el número de compilación. Los números de versión principales / secundarios se especificaron en la configuración del proyecto CC.Net. El número de compilación se reinició en 0001 para cada cambio en el número de revisión mayor o menor (por ejemplo, si pasó de la versión 7.1 a la versión 7.3, por ejemplo, la compilación 7.1 podría estar en el número de compilación 783, pero la primera compilación 7.3 comenzó con el número de compilación 1, la siguiente compilación 7.1 sería la compilación 784.

Para cambiar los números de versión simplemente se requiere ajustar 1 configuración del archivo de configuración de CC.Net.


La forma más fácil de hacer esto es cambiar el problema. En lugar de hacer que la compilación Any haga esto por usted, haga que el proceso al que esté llamando Ant calcule cuál debería ser el número de versión, y luego pase eso como una propiedad, por ejemplo

ant -Dbuild.version = 1.2.3

Esto tiene la flexibilidad de cualquier compilación en la que esté trabajando para poder seguir su ejemplo, como la revisión de SVN, la fecha y hora actual, o lo que sea.

ant -Dbuild.version = svnversion .

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

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

Puedes obtener bastante completo si quieres.

Si desea tener un número cada vez mayor, puede almacenarlo en un archivo y luego pasarlo en tiempo de compilación. Por ejemplo, puedes hacer:

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

Por último, si realmente desea que esto esté en el archivo build.xml, lo mejor que puede hacer es tener una tarea separada para ejecutar la opción de incremento y construcción y desechar una compilación de hormigas anidadas con su objetivo "principal". Así terminarías con

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

En otras palabras, dado su build.xml con un valor predeterminado (actual) de ''build'', luego cámbielo a ''version'' y haga que la tarea de la versión de ant ''haga el cálculo seguido de una llamada anidada y compile.

La implementación se deja como un ejercicio para el lector, como lo es la traducción del enfoque a una plataforma que no es UNIX.


Podemos usar condiciones para verificar si debemos aumentar la versión micro, menor y mayor.

Incremento menor si el micro es 9, y así sucesivamente.

<target name="increaseBuildNumber" depends="increase.micro, increase.minor, increase.major" description="Increase Build Number"/> <target name="increase.micro" if ="microNotEquals9"> <propertyfile file="build.properties"> <entry key="micro.number" default="0" operation="+" pattern="0" type="int"/> </propertyfile> </target> <target name="increase.minor" if = "microEquals9andMinorNotEquals9"> <propertyfile file="build.properties"> <entry key="minor.number" default="0" operation="+" pattern="0" type="int"/> <entry key="micro.number" value="0" operation="=" pattern="0" type="int"/> </propertyfile> </target> <target name="increase.major" if = "microAndMinorEquals9" > <propertyfile file="build.properties"> <entry key="major.number" default="0" operation="+" pattern="0" type="int"/> <entry key="minor.number" value="0" operation="=" pattern="0" type="int"/> <entry key="micro.number" value="0" operation="=" pattern="0" type="int"/> </propertyfile> </target> <condition property="minorEquals9"> <equals arg1="${minor.number}" arg2="9"/> </condition> <condition property="microEquals9andMinorNotEquals9"> <and> <equals arg1="${micro.number}" arg2="9"/> <not><equals arg1="${minor.number}" arg2="9"/></not> </and> </condition> <condition property="microAndMinorEquals9"> <and> <equals arg1="${micro.number}" arg2="9"/> <equals arg1="${minor.number}" arg2="9"/> </and> </condition> <condition property="microNotEquals9"> <not><equals arg1="${micro.number}" arg2="9"/></not> </condition>