web-dev-qa-db-fra.com

Incrémentation automatique d'un numéro de build dans un projet Java

J'utilise un système de version qui est représenté par abbuild où a est la version globale (sera 0 pour les versions prototype, alpha et bêta, 1 pour la version majeure), b est la version jalon (dans le sens de représenter le proto , alpha, beta) et build représentent littéralement le nombre de fois où le projet a été compilé.

Pour le moment, l'application est lue dans un fichier texte, incrémente le nombre et enregistre dans un fichier texte lorsque l'application est exécutée avec un indicateur de débogage défini.

Je suis à la recherche d'une façon plus "correcte" de le faire en utilisant Java et Netbeans. Y a-t-il un moyen de pouvoir injecter un numéroteur de build quelque part dans le processus de build? Enregistrer de préférence le numéro dans un fichier source fourni avec le projet - au lieu de compter sur l'existence d'un fichier à proximité.

27
Scott Drew

Il existe quelques plugins Maven populaires qui accomplissent cet exploit:

Le plugin de sortie Maven du projet Apache Maven est un peu overkill pour simplement mettre à jour le numéro de version. Par conséquent tilisez ce dernier plugin pour créer un numéro de version (sous la forme de MAJOR.MINOR.BUILD; par exemple, 3.1.44 est auto-incrémenté) comme suit:

  1. Ouvrez le pom.xml fichier.
  2. Incluez le plugin dans la section build (après la section dependencies):
  <scm>
    <connection>scm:svn:http://127.0.0.1/dummy</connection>
    <developerConnection>scm:svn:https://127.0.0.1/dummy</developerConnection>
    <tag>HEAD</tag>
    <url>http://127.0.0.1/dummy</url>
  </scm>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <id>buildnumber</id>
            <phase>validate</phase>
            <goals>
              <goal>create</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <format>{0,number}</format>
          <items>
            <item>buildNumber</item>
          </items>                    
          <doCheck>false</doCheck>
          <doUpdate>false</doUpdate>
          <revisionOnScmFailure>unknownbuild</revisionOnScmFailure>   
        </configuration>
      </plugin>    
    </plugins>
    <finalName>${project.artifactId}-${project.version}.${buildNumber}</finalName>
  </build>
  1. Assurez-vous que le pom.xml définit la version principale et la version mineure dans l'élément version près du haut du fichier. Par exemple:
<version>3.1</version>
  1. Sauver le pom.xml fichier.
  2. Reconstruisez le projet.

Le numéro de version devrait augmenter.


Le plugin nécessite un référentiel de gestion de code source configuré (<scm>). Si vous ne vous souciez pas du numéro d'enregistrement du référentiel, utilisez plutôt dummy scm . Cela peut être utilisé pour inclure le numéro de révision du référentiel, ce qui est un exercice pour reader .

20
Dave Jarvis

Vous pouvez utiliser git commit count de la branche actuelle comme numéro de build. Utilisez cette ligne de commande pour obtenir le nombre de validations: git rev-list HEAD --count.

L'intégration avec les outils de génération sera assez simple. Si vous utilisez Gradle, vous pouvez utiliser ce plugin: https://github.com/rockerhieu/Versionberg/

1
Hieu Rocker

J'ai un problème et j'utilise la réponse de "Dave Jarvis". Cela ajoute la version et le numéro de build corrects au fichier jar généré localement comme: myProject-3.1.1234.jar. Mais dans le référentiel maven, l'artefact est installé en tant que version "3.1" au lieu de (je m'y attendais) "3.1.1234". Le numéro de build y manque encore ...

Pour installer l'artefact dans le référentiel maven avec la version et le numéro de build corrects ("3.1.1234"), vous devez faire (en plus de la réponse de "Dave Jarvis"):

  1. Ajout d'une propriété de version majeure/mineure:
<properties>
  <!-- !!!!!!!!! SETTING HERE THE CORRECT MAJOR/MINOR VERSION NUMER !!!!!!!!!! -->
  <major.minor.version>1.0</major.minor.version>
</properties>
  1. Définition du numéro de version correct pour l'artefact à l'aide de nashorn-maven-plugin:
<!-- set "major.minor.revision" version -->
<plugin>
  <groupId>io.github.michaldo</groupId>
  <artifactId>nashorn-maven-plugin</artifactId>
  <version>0.0.1</version>
  <executions>
    <execution>
      <phase>validate</phase>
      <goals>
        <goal>eval</goal>
      </goals>
      <configuration>
        <script>
          $project.artifact.version = "${major.minor.version}.${buildNumber}";
        </script>
      </configuration>
    </execution>
  </executions>
</plugin>    

Après avoir reconstruit/installé le projet, l'artefact sera dans le référentiel maven en tant que version "3.1.1234" :-)

Remarque: pour incrémenter la version majeure ou mineure, vous devez uniquement modifier le major.minor.version propriété!

0
Steffen