13

Ho un pom con il seguente GAVRimuovere -snapshot dalla versione del progetto in pom

<groupId>com.company.services</groupId> 
<artifactId>test-branch-2</artifactId> 
<version>1.0.21-SNAPSHOT</version> 

Voglio rimuovere -SNAPSHOT da questa utilizzando Maven in modalità batch, così posso farlo con Jenkins e non devono specificare qualsiasi cosa manualmente.

Ho esaminato la documentazione per la versione: set ma tutte le opzioni mi offrono un prompt interattivo e mi chiedono di digitare un nome per la versione.

Preferirei il plug-in delle versioni, non il plug-in di rilascio.

+1

'versioni MVN: impostare -DnewVersion = 1.0.21' dovrebbe fare il trucco, non è vero? – Behe

+0

Sì, ma no. Come sei arrivato alla stringa "1.0.21" senza averlo fatto o averlo fatto o averlo fatto? – Jepper

+0

Ah, capisco. Date un'occhiata a [pagina 123 f. di DevOps for Developers] (http://books.google.de/books?id=yEqrMNX3LAgC&lpg=PA124&ots=IoIU0MYUp-&dq=huettermann%20automatic%20releasing&hl=de&pg=PA123#v=onepage&q=huettermann%20automatic%20releasing&f=false) Michael Hüttermann descrive un plugin Maven che rimuove il -SNAPSHOT e imposta di conseguenza la proprietà _newVersion_ del plugin delle versioni. – Behe

risposta

13

Dalla versione 2.10 delle versioni Maven Plugin si può semplicemente fare:

mvn versions:set -DremoveSnapshot 
+0

Grazie per questo, questa è la soluzione più semplice! – PierreF

+0

@jeanMarcAssin Non dovrebbe essere questa la risposta accettata? – Rinke

+0

Sì, dovrebbe, ma non sono l'OP, quindi non posso cambiarlo. @Jepper hai provato la soluzione Rinke? – PierreF

8

Se davvero non si desidera utilizzare il Maven Release Plugin (per qualsiasi motivo), ecco come riesco a rilasciare il suffisso SNAPSHOT (annodato come classificatore) da un MAVen POM in un modo standard (ovvero , niente scripting, nessun plugin maven personalizzato).

Dato il seguente profilo:

<profile> 
    <id>drop-snapshot</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <version>1.11</version> 
       <executions> 
        <execution> 
         <id>parse-version</id> 
         <phase>validate</phase> 
         <goals> 
          <goal>parse-version</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>versions-maven-plugin</artifactId> 
       <version>2.2</version> 
       <executions> 
        <execution> 
         <id>set-version</id> 
         <phase>validate</phase> 
         <goals> 
          <goal>set</goal> 
         </goals> 
         <configuration> 
          <newVersion>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</newVersion> 
         </configuration> 
        </execution> 
        <execution> 
         <id>upgrade-pom</id> 
         <phase>validate</phase> 
         <goals> 
          <goal>commit</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</profile> 

E semplicemente eseguendo: mvn validate -Pdrop-snapshot
La versione di un esempio POM passato da 0.0.1-SNAPSHOT a 0.0.1.

Come funziona davvero:

  • Il build-helper-maven-plugin, parse-version obiettivo, analizzerà la versione corrente del POM e metterlo in un insieme di proprietà che hanno di default parsedVersion come prefisso e majorVersion, minorVersion, incrementalVersion come suffissi (controlla la documentazione, avrai anche classifier e buildNumber). Quindi, dopo la sua esecuzione, possiamo quindi utilizzare nel nostro POM le proprietà come ${parsedVersion.majorVersion} e così via.
  • L'obiettivo versions-maven-plugin, set, utilizzerà quindi queste proprietà per creare la nuova versione effettivamente desiderata (in questo caso l'eliminazione di SNAPSHOT, perché abbiamo escluso la proprietà ${parsedVersion.classifier}).
  • Infine, l'obiettivo versions-maven-plugin, commit renderà effettive queste modifiche.
2

Aggiungere il seguente alla POM:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.11</version> 
      <configuration> 
       <name>newVersion</name> 
       <value>${project.version}</value> 
       <regex>-SNAPSHOT</regex> 
       <failIfNoMatch>false</failIfNoMatch> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>versions-maven-plugin</artifactId> 
      <version>2.2</version> 
     </plugin> 
    </plugins> 
</build> 

È ora possibile rimuovere la parte -SNAPSHOT della versione del progetto con:

mvn build-helper:regex-property versions:set -N 

Il -N dice Maven per Proces solo il progetto radice nel caso in cui tu abbia moduli definiti nel tuo POM. Questo non è strettamente necessario, ma impedisce al plug-in build-helper di funzionare inutilmente contro i sottomoduli. Il plug-in versions viene eseguito solo sul progetto root in ogni caso e attraversa automaticamente tutti i moduli. Prendi in considerazione l'utilizzo della regola reactorModuleConvergence del plug-in maven-enforcer per assicurarti che i progetti multi-modulo siano gestiti correttamente.

È possibile eseguire mvn versions:commit per rimuovere il POM (s) di backup generato da versions:set. In alternativa è possibile aggiungere <generateBackupPoms>false</generateBackupPoms> alla configurazione del plug-in versions.

1

Simile a l'approccio di A_Di-Matteo con build-helper, ma senza la necessità di configurazione del plugin aggiuntivi:

mvn build-helper:parse-version versions:set \ 
    -DnewVersion=\${parsedVersion.majorVersion} \ 
     .\${parsedVersion.minorVersion} \ 
     .\${parsedVersion.incrementalVersion \ 
     .\${parsedVersion.buildNumber} \ 
     versions:commit 

Questo sostituirà il vostro 1.0.0.0-SNAPSHOT con 1.0.0.0 nel pom.xml.