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>
War es hilfreich?

Lösung

Das Problem hat zwei Teile:

  1. 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 das finalName Element in den Aufbau gesetzt. Dadurch wird die Artefakte mit dem beabsichtigten Namen im lokalen Repository erstellen.

  2. Das Plugin installiert die finalName ignorieren und sie als 1.0.0-SNAPSHOT bereitstellen, unabhängig, ich weiß nicht, von einer Art und Weise zu adressieren. Die buildNumber 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top