web-dev-qa-db-ja.com

Maven2フィルタリングで現在の日付を追加する

Maven2プロジェクトがあり、プロパティファイルに現在のバージョンと現在の日付を追加する必要があります。

現在のバージョンでは、${project.version}、これは正しく機能します。

私の質問は、プロパティファイルで現在の日付(つまり、Maven2によってビルドが行われる日付)をどのように設定できますか?

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

(さらに、日付の形式を指定できる場合、それは本当に素晴らしいでしょう)

50
Romain Linsolas

これには 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}で利用できます。

48
Thomas Marti

この機能は、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は、リソースにフィルターできる新しいプロパティです。

73
jj.

Maven 2.1 M1以降、${maven.build.timestamp}を定義した場合${maven.build.timestamp.format}

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

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の内部または外部でビルドすると、タイムスタンプが正しく生成され、リソースフィルタリングで機能します!

非常にシンプルな機能が非常に難しいことは残念です...

12
Garret Wilson

別の解決策は、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}
11
Romain Linsolas

これは私のために働いた。私が欲しかったのはタイムスタンプだけでした。

ポンポンで...

<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>
9
boz jennings

スティック${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>
7
AmanicA

maven 2.1.0で動作します

$ {maven.build.timestamp}

5
elciospy