Domanda

Sto cercando di aggiungere svn.revision alla versione del progetto come numero di build e non riesco a farlo. Il mio vaso ha il nome corretto durante il packaging, ma è installato nel mio repository locale è come se $ {buildNumber} fosse / non fosse definito quando è stata impostata la versione.

Ricevo foo-1.0.0-SNAPSHOT- $ {buildNumber} invece di foo-1.0.0-SNAPSHOT- 304

Qualche idea su cosa stia facendo di sbagliato o aggiungere una revisione alla versione del progetto è una cattiva idea? Grazie per l'aiuto.

<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>
È stato utile?

Soluzione

Il problema ha due parti:

  1. Stai tentando di impostare buildNumber nella versione prima che venga risolta, quindi sarà sempre $ {buildNumber} anziché il valore risolto.

    Invece di provare a cambiare dinamicamente la versione, dovresti impostare buildNumber nell'elemento finalName nella build. Ciò creerà gli artefatti con il nome previsto nel repository locale.

  2. Il plugin di installazione ignorerà il finalName e lo distribuirà come 1.0.0-SNAPSHOT a prescindere, non conosco un modo per affrontarlo. buildNumber viene aggiunto a Manifest se si configura il plug-in come di seguito.

    Quindi la tua configurazione sarebbe simile a:

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

Eviterei di usare i numeri di build nei progetti SNAPSHOT .

Maven fornisce la parola chiave SNAPSHOT per indicare un progetto volatile in sviluppo attivo. Quindi, se fai riferimento a un progetto con una versione di dipendenza SNAPSHOT , Maven controllerà automaticamente la presenza di aggiornamenti e manterrà sincronizzate le tue dipendenze.

Se poi aggiungi un numero di build alla fine di quella versione, dovrai aggiornare manualmente le dipendenze, in modo da perdere qualsiasi vantaggio derivante dal suffisso SNAPSHOT .

Evito personalmente di utilizzare i numeri di build, ove possibile, comunque. Se devo aggiornare un progetto, devo solo aumentare il numero della versione o usare un suffisso come beta-2 o RC2 . Se devi tenere traccia della revisione nel SNAPSHOT , ti consiglio di aggiungerla al Manifest in modo da poter controllare dove ha avuto origine la build, ma utilizzare il suffisso SNAPSHOT standard per consentire a Maven di risolvere normalmente le versioni. La configurazione seguente mostra come aggiungere la revisione a Manifest.

Per quanto riguarda la tua configurazione, mi sembra OK supponendo che l'URL di SCM sia impostato correttamente. Se non hai una configurazione SCM nel tuo POM, questo potrebbe essere il problema.

È possibile eseguire con -X e verificare l'eventuale output dal plug-in che indica perché non sta impostando la proprietà?

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

Altri suggerimenti

Aggiungilo dopo il 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>

E il buildNumber verrà riconosciuto dall'imballaggio e dalla distribuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top