wake-up-neo.net

Maven Build Number Plugin, wie speichere ich die Build-Nummer in einer Datei?

Ich habe ein Java-Projekt mit Spring Framework und Git und wollte eine Build-Nummer anzeigen. Ich habe das Build Number Maven Plugin gefunden. Bei Git ist die Build-Nummer ein Git-Hash. Das mag ich nicht und ich fand ein Date viel ausdrucksvoller.

Ich fand diesen ausgezeichneten Blog-Artikel der erklärt, wie man das Build-Number-Plugin mit einem anderen Profil für SVN und Git verwendet. Da ich nur Git benutze, anstatt ein neues Profil zu erstellen, habe ich nur den Plugin-Teil in mein Build-Tag kopiert.

Wenn ich "mvn package" ausführe, heißt es:

[INFO] --- buildnumber-maven-plugin:1.0:create (default) @ sherd ---
[INFO] Storing buildNumber: 2011-08-04_21-48_stivlo at timestamp: 1312487296631

Was sieht in Ordnung aus, aber ich frage mich, wo es gespeichert ist? "git status" erkennt keine neue Datei und es scheint, dass sie nicht in target/too enthalten ist (target/befindet sich in meinem .gitignore).

Vielleicht muss ich die Konfiguration ändern, um die Build-Nummer in einer Datei zu speichern? Wie kann ich den Build-Nummernwert verwenden?


Dank des Hinweises von Michael-O habe ich das Kapitel über Filtern von Ressourcendateien in Maven Getting Started Guide gelesen. Ich habe in src/main/resources/properties/application.properties eine Datei application.properties mit folgendem Inhalt erstellt:

# application properties
application.name=${pom.name}
application.version=${pom.version}
application.build=${buildNumber}

Ich habe das folgende XML-Snippet in meinen Build-Abschnitt eingefügt:

<resources>
    <resource>
        <directory>src/main/resources/properties</directory>
        <filtering>true</filtering>
    </resource>
</resources>

Wenn ich jetzt über die Befehlszeile "mvn package" aufrufe, wird diese Eigenschaftendatei in target/classes/properties/application.properties gespeichert, zum Beispiel mit folgendem Inhalt:

# application properties
application.name=Sherd Control Panel
application.version=1.0.1-SNAPSHOT
application.build=2011-08-05_05-55_stivlo

Alles funktioniert gut von der Kommandozeile aus, aber m2Eclipse gibt Build-Fehler aus:

05/08/11 6.05.03 CEST: Build errors for obliquid-cp; 
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal
org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project 
sherd: Cannot get the branch information from the scm repository : 
Exception while executing SCM command.

Aus irgendeinem Grund versucht m2Eclipse, eine Verbindung zu meinem Repository herzustellen, kann dies jedoch nicht, da es sich um ein Git-Repository handelt, auf das mit SSH und einem privaten Schlüssel zugegriffen wird. Ich frage mich, ob ich m2Eclipse anweisen kann, keine Verbindung zu Git herzustellen.


Nachdem ich mehr über revisionOnScmFailure Option gefunden habe, setzen Sie es auf true und jetzt funktioniert auch m2Eclipse. Als Referenz ist hier die vollständige Konfiguration des von mir verwendeten Buildnummer-Maven-Plugins (siehe pom.xml im Abschnitt build/plugins).

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <goals>
                <goal>create</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <doCheck>false</doCheck>
        <doUpdate>false</doUpdate>
         <revisionOnScmFailure>true</revisionOnScmFailure>
        <format>{0,date,yyyy-MM-dd_HH-mm}_{1}</format>
        <items>
            <item>timestamp</item>
            <item>${user.name}</item>
        </items>
    </configuration>
</plugin>
20
stivlo

Speichern Sie es in einer gefilterten Eigenschaftendatei. Siehe maven verwenden, um die Versionsnummer in eine Textdatei auszugeben

4
Michael-O

Sie sollten die Option revisionOnScmFailure nicht auf true setzen, es erwartet keinen Boolean. Legen Sie den Revisionsstring fest, den Sie verwenden möchten, wenn SCM nicht verfügbar ist, wie na oder ähnliches. Für Ihren Fall ist es egal, da Sie das Build-Nummern-Format überschreiben, aber es wäre korrekter.

Siehe buildnumber-maven-plugin docs .

10
Tvaroh

Ich konnte das vom OP gemeldete Problem nicht reproduzieren. In meinem Fall funktionieren sowohl die Befehlszeile als auch m2Eclipse einwandfrei und die Datei wird korrekt im Ordner target/classes generiert. Die Antwort von @KasunBG ist falsch. Die buildNumber.properties wird nur generiert, wenn Sie Folgendes verwenden:

        <format>{0,number}</format>
        <items>
            <item>buildNumber</item>
        </items>

buildNumber.properties wird zum Speichern einer Nummer verwendet, die erhöht werden kann. Aus diesem Grund (glaube ich) erzeugt das Plugin diese Datei nicht, wenn Sie timestamp/scmVersion usw. verwenden.

2

Die Seite documentation gibt an, dass die Eigenschaftendateien in ${basedir}/buildNumber.properties gespeichert sind, das erstellt wird, wenn die buildnumber:create-Phase ausgeführt wird.

0