Question

J'essaie d'ajouter svn.revision à la version du projet en tant que numéro de version et ne semble pas pouvoir le faire. Mon nom du fichier jar est correct lors de l’emballage, mais il est installé dans le référentiel local comme si $ {buildNumber} était / était indéfini lorsque la version a été définie.

Je reçois foo-1.0.0-SNAPSHOT- $ {buildNumber} au lieu de foo-1.0.0-SNAPSHOT- 304 .

Avez-vous une idée de ce que je fais mal ou est-ce que l’ajout d’une révision à la version du projet est une mauvaise idée? Merci pour l'aide.

<project>
  ...
  <version>1.0.0-${release.identifier}-${buildNumber}</version>
  <properties>
    <release.identifier>SNAPSHOT</release.identifier>
  </properties>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>useLastCommittedRevision</id>
            <goals>
              <goal>create</goal>
            </goals>
            <configuration>
              <useLastCommittedRevision>true</useLastCommittedRevision>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  ...
</project>
Était-ce utile?

La solution

Le problème comporte deux parties:

  1. Vous essayez de définir le buildNumber dans la version avant sa résolution, de sorte qu'il s'agisse toujours de $ {buildNumber} plutôt que de la valeur résolue.

    Au lieu d'essayer de modifier dynamiquement la version, vous devez définir buildNumber dans l'élément finalName de la construction. Cela créera les artefacts avec le nom voulu dans le référentiel local.

  2. Le plug-in d'installation ignorera le finalName et le déploiera en tant que 1.0.0-SNAPSHOT . Peu importe, je ne connais aucun moyen de résoudre ce problème. Le buildNumber est ajouté au manifeste si vous configurez le plug-in comme ci-dessous.

    Donc, votre configuration serait quelque chose comme:

    <version>1.0.0-${release.identifier}</version>
    ...
    <build>
      <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName>
      ...
    </build>
    

J'éviterais d'utiliser des numéros de build dans les projets SNAPSHOT .

Maven fournit le mot clé SNAPSHOT pour désigner un projet volatile en développement actif. Par conséquent, si vous référencez un projet avec une version de dépendance SNAPSHOT , Maven recherchera automatiquement les mises à jour et maintiendra la synchronisation de vos dépendances.

Si vous ajoutez ensuite un numéro de build à la fin de cette version, vous devrez mettre à jour manuellement les dépendances, de sorte que vous perdez tout avantage à avoir le suffixe SNAPSHOT .

Personnellement, j’évite de toute façon d’utiliser des numéros de build. Si je dois mettre à jour un projet, je remplace simplement le numéro de version ou utilise un suffixe tel que beta-2 ou RC2 . Si vous devez suivre la révision dans SNAPSHOT , nous vous recommandons de l'ajouter au manifeste afin de pouvoir vérifier l'origine de la construction, mais utilisez le suffixe standard SNAPSHOT . permettre à Maven de résoudre les versions normalement. La configuration ci-dessous montre comment ajouter la révision au manifeste.

En ce qui concerne votre configuration, il me semble correct de présumer que votre URL SCM est correctement configurée. Si vous n'avez pas de configuration SCM dans votre POM, cela peut être le problème.

Pouvez-vous exécuter avec -X et rechercher une sortie du plug-in indiquant pourquoi il ne définit pas la propriété?

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>buildnumber-maven-plugin</artifactId>
  <version>0.9.4</version>
  <executions>
    <execution>
      <id>useLastCommittedRevision</id>
      <phase>validate</phase>
      <goals>
        <goal>create</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
      <manifestEntries>
        <Implementation-Build>${buildNumber}</Implementation-Build>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

Autres conseils

Ajoutez ceci après le buildnumber-maven-plugin :

<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 = "${buildNumber}";
                </script>
            </configuration>
        </execution>
    </executions>
</plugin>

Et le buildNumber sera reconnu par empaquetage et déploiement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top