Frage

Ich habe ein Maven2 Projekt, und ich muß hinzufügen, in einer Eigenschaftendatei, die aktuelle Version und das aktuelle Datum.

Für die aktuelle Version, ich habe verwendet ${project.version}, die richtig funktioniert.

Meine Frage ist, wie kann ich das aktuelle Datum (das heißt der Zeitpunkt, wenn der Build von Maven2 getan wird), die in meinem Properties-Datei:

client.version=Version ${project.version}
client.build=???

(zusätzlich, wenn ich das Format für das Datum angeben kann, wird es wirklich groß sein)

War es hilfreich?

Lösung

Sie können mit dem Maven Plugin Buildnummer für diese :

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>buildnumber-maven-plugin</artifactId>
      <executions>
        <execution>
          <phase>initialize</phase>
          <goals>
            <goal>create</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <doCheck>false</doCheck>
        <doUpdate>false</doUpdate>
        <timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss}</timestampFormat>
      </configuration>
    </plugin>
  </plugins>
</build>

Das Datum wird dann in der Eigenschaft $ {} buildnumber.

Andere Tipps

Feature funktioniert nicht mit Maven 2.2.1 Ressource Filterung.

Siehe auch: https://issues.apache.org/jira/browse/MRESOURCES -99

Aber Sie könnten eine benutzerdefinierte Eigenschaft in der Mutter pom erstellen:

<properties>
    <maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
    <buildNumber>${maven.build.timestamp}</buildNumber>
</properties>

Wo ist buildnumber die neue Eigenschaft, die in die Ressourcen gefiltert werden kann.

Da Maven 2.1 M1, können Sie jetzt zur Verfügung gestellt haben ${maven.build.timestamp} Sie auch ${maven.build.timestamp.format} definieren

<properties>
    ...
    <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
    ...
</properties>

Thomas Marti Antwort ist ein Schritt in die richtige Richtung, aber es gibt einen einfacheren Ansatz, der keine Dummy-<scm> Deklaration im POM erfordert. Verwenden Sie die buildnumber-maven-plugin, sondern verwenden Sie die create-timestamp Ziel. Die Dokumentation ist nicht klar; hier ist, wie es aussieht ein Datum in YYYY-MM-DD Format zu erhalten und es in der build.date Eigenschaft setzen:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>create-timestamp</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <timestampFormat>yyyy-MM-dd</timestampFormat>
        <timestampPropertyName>build.date</timestampPropertyName>
    </configuration>
</plugin>

Aus dem Kasten wird dies nicht mit M2e in Eclipse arbeiten, so dass Sie den folgenden innerhalb des POM <build> Abschnitts hinzufügen müssen werden:

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>org.codehaus.mojo</groupId>
                                <artifactId>buildnumber-maven-plugin</artifactId>
                                <versionRange>[1.2,)</versionRange>
                                <goals>
                                    <goal>create-timestamp</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute>
                                    <runOnConfiguration>true</runOnConfiguration>
                                    <runOnIncremental>true</runOnIncremental>
                                </execute>
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

Das sagt M2e, dass Sie es wollen, gehen Sie vor und das Plugin ausgeführt werden, wenn innerhalb von Eclipse zu bauen.

Wenn Sie nun innerhalb oder außerhalb von Eclipse bauen, wird der Zeitstempel korrekt erzeugt und arbeitet mit Ressourcenfilterung!

Es ist schade, dass die Funktionalität so einfach ist so schwer zu sein ...

Eine andere Lösung ist stark in der pom.xml zu verwenden (vielleicht nicht so richtigen wie die Lösung von Thomas Marti vorgeschlagen):

   <build>
      <resources>
         <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
         </resource>
      </resources>
      <plugins>
         <plugin>
            <groupId>org.codehaus.groovy.maven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <executions>
               <execution>
                  <phase>validate</phase>
                  <goals>
                     <goal>execute</goal>
                  </goals>
                  <configuration>
                     <source>
                     import java.util.Date 
                     import java.text.MessageFormat 
                     def vartimestamp = MessageFormat.format("{0,date,yyyyMMdd-HH:mm:ss}", new Date()) 
                     project.properties['buildtimestamp'] = vartimestamp
                     </source>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>

und verwenden Sie dann die buildtimestamp Eigenschaft:

client.version=${pom.version}
client.build=${buildtimestamp}

Das funktionierte für mich. Alles, was ich war der Zeitstempel wollte.

In der pom ...

<properties>
    <maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
    <dev.build.timestamp>${maven.build.timestamp}</dev.build.timestamp>
</properties>
...
<overlay>
   <groupId>mystuff</groupId>
   <artifactId>mystuff.web</artifactId>
   <filtered>true</filtered>
</overlay>

Und in einer JSP-Datei ...

<div>Built: ${dev.build.timestamp}</div>

Beispiel Ergebnis ist ...

<div>Built: 20130419-0835</div>

Stick ${build.time} in einer Eigenschaftsdatei und die folgenden in pom.xml:

<build>
   <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.3</version>
        <configuration>
          <timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
          <timestampPropertyName>build.time</timestampPropertyName>
        </configuration>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>create-timestamp</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
   </plugins>
</build>

Siehe auch die Buildnumber-Maven-Plugin Dokumentation .


(Andere Antworten bekamen schließe ich besonders Garret Wilson aber seine Eclipse-Config war für mich nicht notwendig, und es hat mich seine Antwort zu ignorieren, so dass ich bin Entsendung genau das, was für mich gearbeitet.)

Als Bonus , wenn Sie zwei Eigenschaften ein für Datum und eine für die Zeit erhalten möchten, das ist, wie Sie es tun:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>buildnumber-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>build.date</id>
      <phase>initialize</phase>
      <goals>
        <goal>create-timestamp</goal>
      </goals>
      <configuration>
        <timestampFormat>yyyy-MM-dd</timestampFormat>
        <timestampPropertyName>build.date</timestampPropertyName>
      </configuration>
    </execution>
    <execution>
      <id>build.time</id>
      <phase>initialize</phase>
      <goals>
        <goal>create-timestamp</goal>
      </goals>
      <configuration>
        <timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat>
        <timestampPropertyName>build.time</timestampPropertyName>
      </configuration>
    </execution>
  </executions>
</plugin>

es ist Arbeit für mich bei Maven 2.1.0

$ {maven.build.timestamp}

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