2010-11-30 18 views
9

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

+0

Sie sind Entwickler scm in Ihrem pom Einstellung? – Steven

+0

@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. –

+0

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

Antwort

10

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.

+0

Clever. Ich kann sehen, dass dies verwendet wird, um 'scmBranch' zu bekommen. – Snekse

3

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.

+0

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

+0

Sie wetten. Manchmal, wenn ich eine Frage stelle: "Nein, das kannst du nicht" reicht nicht :) – javamonkey79

2

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

3

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

Schade, dass es 'scmBranch' nicht als spezielles Element unterstützt. – Snekse