web-dev-qa-db-fra.com

Inclure git commit hash dans la version jar

J'utilise maven et mon objectif est d'inclure le hachage de validation git dans le numéro de version. Quelque chose comme: 1.1. {Git_hash}.

J'essaye de suivre ceci tutoriel .

Q: est-il possible de remplacer d'une manière ou d'une autre le numéro de version spécifié dans l'élément version du fichier pom?

15
Herr Kater

Une façon d'y parvenir est d'utiliser le git-commit-id-plugin . Ajoutez ceci à la liste des plugins dans la section build de votre pom.xml:

<plugin>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
    <version>${git-commit-id-plugin.version}</version>
    <executions>
        <execution>
            <id>get-the-git-infos</id>
            <goals>
                <goal>revision</goal>
            </goals>
            <phase>validate</phase>
        </execution>
    </executions>
    <configuration>
        <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
    </configuration>
</plugin>

Notez que j'ai changé la phase en validate, donc la propriété du numéro de révision est déjà disponible lorsque l'artefact est empaqueté.

Ensuite, ajoutez ce qui suit à la section build:

<build>
    <finalName>${project.artifactId}-${project.version}-${git.commit.id.describe-short}</finalName>
    <!-- your list of plugins -->
</build>

Le git.commit.id.describe-short la propriété est produite par le git-commit-id-plugin. Il contient le numéro de révision git actuel (raccourci à 7 chiffres) et un indicateur dirty facultatif.

L'artefact produit ressemblera à ceci: examplelib-1.0.2-efae3b9.jar (ou examplelib-1.0.2-efae3b9-dirty.jar en cas de modifications non validées dans votre référentiel).

En outre, vous souhaiterez peut-être également mettre ces informations dans le MANIFEST.MF de votre artefact. Dans ce cas, ajoutez ceci à votre liste de plugins (l'exemple suppose que l'artefact est un jar):

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifestEntries>
                <SCM-Revision>${git.commit.id.describe-short}</SCM-Revision>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

Remarque additionnelle:

  1. J'ai montré une configuration simple du git-commit-id-plugin. Sur leur site, vous pouvez trouver plus d'options et de propriétés. En plus des propriétés, qui peuvent être utilisées dans pom.xml, le plugin peut également générer un fichier de propriétés contenant des informations sur la révision.

  2. Comme alternative à git-commit-id-plugin, vous préférerez peut-être buildnumber-maven-plugin . Afin d'obtenir les numéros de révision, ce plugin nécessite un plugin SCM également configuré dans votre pom.xml.

  3. Cette configuration peut interférer avec d'autres plugins qui transforment ou renomment vos artefacts (dans mon cas, c'était le plugin maven-shadow-plugin - l'une des sources du pot qu'elle produit ne contenait pas le numéro de révision approprié).

29
user3078523

La réponse acceptée ci-dessus n'a pas fonctionné pour moi. J'ai trouvé le lien https://dzone.com/articles/maven-git-commit-id-plugin , d'où j'ai copié le code du plugin ci-dessous. Cela a fonctionné la première fois pour moi. J'ai maintenant le fichier git.properties automatiquement inclus dans mon fichier JAR cible. Très utile pour le suivi.

<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.4</version>
<executions>
    <execution>
        <id>get-the-git-infos</id>
        <goals>
            <goal>revision</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
    <prefix>git</prefix>
    <verbose>false</verbose>
    <generateGitPropertiesFile>true</generateGitPropertiesFile>
    <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
    <format>json</format>
    <gitDescribe>
        <skip>false</skip>
        <always>false</always>
        <dirty>-dirty</dirty>
    </gitDescribe>
</configuration>

Ajoutez finalName à la section build pour avoir également la version dans le nom du fichier cible

<build>

<finalName>${project.artifactId}-${project.version}-${git.commit.id.describe-short}</finalName>

...

</build>
0
DAB