Kann ich die Projektversion mit Buildnumber-Maven-Plugin eingestellt?
-
22-07-2019 - |
Frage
Ich versuche, die svn.revision zu projizieren Version als Build-Nummer hinzuzufügen, und kann nicht scheinen, dies zu tun. Mein Glas hat den richtigen Namen durin Verpackung, aber es ist in dem meinem lokalen Repository installiert ist, als ob $ {} buildnumber ist / ist nicht definiert, wenn die Version eingestellt wurde.
ich foo-1.0.0-Snapshot- $ {} buildnumber anstelle von foo-1.0.0-Snapshot- 304
Jede Idee, was ich falsch mache oder eine Überarbeitung der Projektversion eine schlechte Idee hinzuzufügen? Danke für die Hilfe.
<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>
Lösung
Das Problem hat zwei Teile:
-
Sie versuchen, die
buildNumber
in die Version zu setzen, bevor es gelöst wird, so dass es immer${buildNumber}
werden anstatt der aufgelösten Wert.Stattdessen dynamisch die Version zu ändern versuchen, sollten Sie die
buildNumber
in dasfinalName
Element in den Aufbau gesetzt. Dadurch wird die Artefakte mit dem beabsichtigten Namen im lokalen Repository erstellen. -
Das Plugin installiert die
finalName
ignorieren und sie als1.0.0-SNAPSHOT
bereitstellen, unabhängig, ich weiß nicht, von einer Art und Weise zu adressieren. DiebuildNumber
wird das Manifest hinzugefügt, wenn Sie das Plugin wie unten konfiguriert werden.So Konfiguration wäre so etwas wie:
<version>1.0.0-${release.identifier}</version> ... <build> <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName> ... </build>
Ich möchte vermeiden, Nummern bauen auf SNAPSHOT
Projekte.
Maven bietet das SNAPSHOT
Schlüsselwort ein flüchtiges Projekt in der aktiven Entwicklung zu bedeuten. Also, wenn Sie ein Projekt mit einer SNAPSHOT
Abhängigkeit Version verweisen, Maven wird nach Updates automatisch und halten Sie Ihre Abhängigkeiten in sync.
Wenn Sie dann eine Build-Nummer an das Ende dieser Version hinzufügen, werden Sie manuell, um die Abhängigkeiten zu aktualisieren, so dass Sie alle profitieren von verlieren SNAPSHOT
Suffix.
Ich persönlich vermeiden Nummern bauen, wo möglich, auf jeden Fall. Wenn ich ein Projekt zu aktualisieren, stoße ich nur die Versionsnummer oder ein Suffix wie beta-2
oder RC2
verwenden. Wenn Sie die Änderung verfolgen in der SNAPSHOT
benötigen, würde ich empfehlen, es an das Manifest hinzugefügt, so können Sie überprüfen, wo der Bau entstanden, aber die Standard-SNAPSHOT
Suffix verwenden, um Maven zu erlauben die Versionen normalerweise zu lösen. Die Konfiguration unten zeigt, wie die Revision zum Manifest hinzuzufügen.
Was Ihre Konfiguration betrifft, so sieht es OK, um mir Ihre SCM-URL unter der Annahme korrekt eingerichtet ist. Wenn Sie keine SCM-Konfiguration in Ihrem POM haben, dass das Problem sein kann.
Können Sie mit -X
laufen und prüfen Sie für jede Ausgabe des Plugins angibt, warum es nicht die Eigenschaft setzt?
<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>
Andere Tipps
Fügen Sie diese nach dem 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>
Und die buildNumber
wird durch Verpackung und Bereitstellung erkannt werden.