13

Ich habe einen pom mit den folgenden GAVentfernen -snapshot von Projektversion in pom

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

Ich mag -SNAPSHOT von diesen mit Maven im Batch-Modus entfernen, also kann ich es mit Jenkins tun und nicht muß spezifizieren Sie alles manuell.

Ich habe die Dokumentation für die Version angesehen: set, aber alle Optionen bieten mir eine interaktive Eingabeaufforderung und bitten mich, einen Namen für die Version einzugeben.

Ich würde die Versionen Plugin, nicht das Release-Plugin bevorzugen.

+1

'mvn Versionen: set -DnewVersion = 1.0.21' sollte es tun, nicht wahr? – Behe

+0

Ja, aber nein. Wie bist du zu der Saite "1.0.21" gekommen, ohne die Pom zu verlieren oder zu katzen? – Jepper

+0

Ah, ich verstehe. Werfen Sie einen Blick auf [Seite 123 f. von DevOps für Entwickler] (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 beschreibt ein Maven-Plugin, das den -SNAPSHOT entfernt und die _newVersion_ -Eigenschaft des Versionen-Plugins entsprechend setzt. – Behe

Antwort

13

Seit der Version 2.10 der Versionen Maven Plugin können Sie einfach tun:

mvn versions:set -DremoveSnapshot 
+0

Danke für diese, das ist die einfachste Lösung! – PierreF

+0

@jeanMarcAssin Sollte dies nicht die akzeptierte Antwort sein? – Rinke

+0

Ja sollte es, aber ich bin nicht das OP, also kann ich es nicht ändern. @Jepper hast du Rinkes Lösung ausprobiert? – PierreF

8

Wenn Sie das Maven Release Plugin (aus welchen Gründen auch immer) nicht verwenden möchten, ist es mir hier gelungen, das Suffix SNAPSHOT (als Klassifikator) aus einem maven POM zu entfernen , kein Scripting, kein Custom Maven Plugin).

folgendes Profil Gegeben:

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

Und einfach ausführen: mvn validate -Pdrop-snapshot
Die Version eines Beispiels aus 0.0.1-SNAPSHOT zu 0.0.1 weitergegeben Pom.

Wie es funktioniert tatsächlich:

  • Das build-helper-maven-plugin, parse-version Ziel, die aktuelle Version des POM analysieren und sie in einer Reihe von Eigenschaften, die durch Standard parsedVersion als Präfix und majorVersion, minorVersion, mit Set incrementalVersion als Suffixe (überprüfen Sie die Dokumentation, haben Sie auch classifier und buildNumber). Nach seiner Ausführung können wir dann in unserem POM Eigenschaften wie ${parsedVersion.majorVersion} und so weiter verwenden.
  • Das Ziel versions-maven-plugin, set, wird dann diese Eigenschaften verwenden, um die neue Version zu erstellen, die Sie tatsächlich möchten (in diesem Fall den SNAPSHOT, da wir die ${parsedVersion.classifier}-Eigenschaft ausgeschlossen haben).
  • Schließlich wird die versions-maven-plugin, commit Ziel, diese Änderungen wirksam machen.
2

folgendes zu Ihrem POM hinzufügen:

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

können Sie jetzt entfernen Sie den -SNAPSHOT Teil des Projekts Version mit:

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

Die -N Maven sagt zu proces nur das Root-Projekt falls Sie Module in Ihrem POM definiert haben. Dies ist nicht unbedingt notwendig, verhindert aber, dass das build-helper Plugin unnötigerweise gegen die Submodule läuft. Das Plugin versions läuft in jedem Fall nur auf dem Root-Projekt und durchläuft alle Module automatisch. Ziehen Sie die Verwendung der reactorModuleConvergence Regel des maven-enforcer Plugins in Betracht, um sicherzustellen, dass Projekte mit mehreren Modulen korrekt behandelt werden.

Sie können mvn versions:commit den Sicherungs- POM (n) von versions:set erzeugt zu entfernen. Alternativ können Sie <generateBackupPoms>false</generateBackupPoms> zur Konfiguration des versions Plugins hinzufügen.

1

ähnlich A_Di-Matteos Ansatz mit build-helper, aber ohne die Notwendigkeit für zusätzliche Plugins Konfiguration:

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

Dies wird Ihre 1.0.0.0-SNAPSHOT mit 1.0.0.0 im pom.xml ersetzen.