Maven2プロジェクトがあり、プロパティファイルに現在のバージョンと現在の日付を追加する必要があります。
現在のバージョンでは、${project.version}
、これは正しく機能します。
私の質問は、プロパティファイルで現在の日付(つまり、Maven2によってビルドが行われる日付)をどのように設定できますか?
client.version=Version ${project.version}
client.build=???
(さらに、日付の形式を指定できる場合、それは本当に素晴らしいでしょう)
これには Maven Buildnumber Plugin を使用できます。
<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>
日付は、プロパティ$ {buildNumber}で利用できます。
この機能は、Maven 2.2.1リソースフィルタリングでは機能しません。
参照: https://issues.Apache.org/jira/browse/MRESOURCES-99
ただし、親pomでカスタムプロパティを作成できます。
<properties>
<maven.build.timestamp.format>yyMMdd_HHmm</maven.build.timestamp.format>
<buildNumber>${maven.build.timestamp}</buildNumber>
</properties>
BuildNumberは、リソースにフィルターできる新しいプロパティです。
Maven 2.1 M1以降、${maven.build.timestamp}
を定義した場合${maven.build.timestamp.format}
<properties>
...
<maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
...
</properties>
Thomas Martiの答えは正しい方向への一歩ですが、POMでのダミー<scm>
宣言を必要としない、より簡単なアプローチがあります。 buildnumber-maven-plugin
を使用しますが、create-timestamp
目標を使用します。ドキュメントは明確ではありません。 YYYY-MM-DD
形式の日付を取得してbuild.date
プロパティに設定すると、次のようになります。
<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>
デフォルトでは、これはm2eを使用するEclipseでは機能しないため、POM <build>
セクション内に以下を追加する必要があります。
<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>
これはm2eに、Eclipse内でビルドするときにプラグインを実行することを指示します。
これで、Eclipseの内部または外部でビルドすると、タイムスタンプが正しく生成され、リソースフィルタリングで機能します!
非常にシンプルな機能が非常に難しいことは残念です...
別の解決策は、pom.xml内でGroovyを使用することです(Thomas Martiが提案した解決策ほど適切ではない場合があります)。
<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>
次に、buildtimestamp
プロパティを使用します。
client.version=${pom.version}
client.build=${buildtimestamp}
これは私のために働いた。私が欲しかったのはタイムスタンプだけでした。
ポンポンで...
<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>
そしてJSPファイルで...
<div>Built: ${dev.build.timestamp}</div>
結果の例は...
<div>Built: 20130419-0835</div>
スティック${build.time}
はプロパティファイルに、次は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>
buildnumber-maven-pluginドキュメント も参照してください。
(他の回答は特にGarret Wilsonに近づきましたが、Eclipseの設定は私にとって必要ではなかったため、彼の答えを無視することになりました。
bonusとして、日付用と時間用の2つのプロパティを取得する場合、次のようにします。
<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>
maven 2.1.0で動作します
$ {maven.build.timestamp}