Während der Verwendung der Maven-Buildnumber-Plugin 1.0 beta 4, scheint es, dass ich die Svn-Revision bekommen kann, wenn ich ein <format>
Tag innerhalb der Konfiguration verwenden. Sobald ich <format>
und <item>buildnumber</item>
Tag verwende, bekomme ich eine automatisch inkrementierende Nummer, aber es entspricht nicht mehr der SVN-Revision und ich weiß nicht, wie ich es zurückbekomme. Gibt es eine Möglichkeit, die SVN-Revisionsnummer innerhalb der <format>
zu verwenden? Die Dokumentation ist nicht sehr klar.maven-buildnumber-plugin SVN-Revision nur verfügbar, wenn nicht Format
Antwort
Das buildnumber-maven-plugin ist verdammt komisch, weshalb es wahrscheinlich noch eine Beta ist. Das Format ist nur für die Elemente, auf die Sie ein Java-Nachrichtenformat anwenden möchten. In den meisten Fällen ist es nur bei Zeitstempeln und Literalfolgen sinnvoll. Wenn Sie keinen Zeitstempel benötigen, verwenden Sie beim Abrufen der Subversion-Revisionsnummer nicht die Formatoption. Wenn Sie das Format verwenden, erhalten Sie, wie Sie angegeben haben, eine Build-Nummer, die immer um eins erhöht wird, anstatt die SCM-Versionsnummer.
Wenn Sie den Zeitstempel benötigen oder andere Elemente haben, die Sie vom buildnumber plugin sowie der Subversion-Revision ableiten, tun Sie jede als separate Ausführungen. Hier ist ein Beispiel dafür, wie die Subverison Revisionsnummer zu erhalten und den Build-Zeitstempel mit zwei getrennten Ausführungen des Plugins:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.0-beta-4</version>
<executions>
<execution>
<id>generate-buildnumber</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
<buildNumberPropertyName>buildRevision</buildNumberPropertyName>
</configuration>
</execution>
<execution>
<id>generate-timestamp</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
<items>
<item>timestamp</item>
</items>
<buildNumberPropertyName>buildDateTime</buildNumberPropertyName>
</configuration>
</execution>
</executions>
</plugin>
Der Schlüssel, um diese Arbeit zu machen ist das buildNumberPropertyName Element verwendet. Überprüfen Sie die Usage Seite des Plugins für weitere Informationen über die Nützlichkeit des Java-Nachrichtenformats.
Clever. Ich kann sehen, dass dies verwendet wird, um 'scmBranch' zu bekommen. – Snekse
Mit dem Aussehen davon nicht. Wenn Sie die Formatkonfiguration verwenden, müssen Sie eines der Standardelemente verwenden.
Von here:
eine Nachricht angeben, wie durch java.text.MessageFormat angegeben. Dies löst "items" Konfiguration
Und dann von here zu lesen:
die entsprechenden Elemente für das Format Nachricht angeben, wie java.text.MessageFormat angegeben. Sonderposten Werte sind "Zeitstempel" und "BuildNumber/d *".
Auch wenn Sie den Code für die mojo aussehen here ein paar Dinge, unterstützen dies:
if (format != null)
{
if (items == null)
{
throw new MojoExecutionException(
" if you set a format, you must provide at least one item, "
+ "please check documentation ");
}
Und:
else
{
// Check if the plugin has already run.
revision = project.getProperties().getProperty(
this.buildNumberPropertyName);
if (this.getRevisionOnlyOnce && revision != null)
{
getLog().debug("Revision available from previous execution");
return;
}
von den Klängen der es nach einer neuen fragen Feature (keine schlechte Idee übrigens). Ich würde es als solches einreichen here.
danke, dass ich so ausführlich darüber gegangen bin, dass ich erwartet habe, dass jemand mir sagt, dass ich etwas falsch gemacht habe – gtrak
Sie wetten. Manchmal, wenn ich eine Frage stelle: "Nein, das kannst du nicht" reicht nicht :) – javamonkey79
Es gibt einen zwingenden Grund, warum das vom Plugin-Entwickler gemacht wurde.Eine empfehlenswerte Art und Weise des Projektes Build Zeitstempel zu erhalten, ist wie folgt:
<project>
<properties>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
<buildDateTime>${maven.build.timestamp}</buildDateTime>
</properties>
</project>
Also alles, was Sie brauchen, ist eine Revisionsnummer zu erhalten, die sehr gut mit einem einzigen Aufruf der Buildnumber-Maven-Plugin getan werden kann, nach seinem Dokumentation.
P.S. Eine Ausführung statt zwei (wie angeboten) spart bei jedem Aufruf des Plugins fast eine Sekunde.)
Ich bin auf das gleiche Problem gestoßen und für ein paar Momente dachte ich die von @ Jean-Rémy Revy vorgeschlagene Lösung funktioniert..aber aus irgendeinem Grund nicht.
Es stellt sich heraus, dass sie in buildnumber-maven-plugin-1.2 Unterstützung für eine spezielle Eigenschaft namens scmVersion hinzugefügt haben. Ab sofort ist v1.2 nicht im maven-Repository verfügbar, obwohl die Webseite des Plugins es als GA ansieht. Sie müssen also die Quelle auschecken (http://svn.codehaus.org/mojo/tags/buildnumber-maven-plugin-1.2/) und sie erstellen ($ mvn install). Dies wird auch das Plugin in Ihrem lokalen Repository installieren.
Danach tun nur dies:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}.{1}</format>
<items>
<item>timestamp</item>
<item>scmVersion</item>
</items>
</configuration>
</plugin>
Schade, dass es 'scmBranch' nicht als spezielles Element unterstützt. – Snekse
Sie sind Entwickler scm in Ihrem pom Einstellung? – Steven
@Steven Ich glaube nicht, dass das Build-Number-Plugin das verwendet. Das letzte Mal, als ich es benutzt habe (vor ungefähr einem Jahr), hat es gerade einen 'svn commit'-Prozess gestartet, also wird die SVN-Information im Dateisystem verwendet. –
Aber ja, es gibt ein SCM-Set und es funktioniert, außer wenn ich Format und Elemente angeben. Ich war nicht klar, weil SO mein Xml aß. Behoben. – gtrak