web-dev-qa-db-ja.com

リソースフィルタリングのためにmaven.build.timestampにアクセスする方法

私はmaven 3.0.4を使用しており、ビルドタイムスタンプにアプリケーションからアクセスできるようにしたいと考えています。このために、.propertiesファイルにプレースホルダーを配置し、mavenがビルド時にフィルター処理するようにします。これは${project.version}に対しては正常に機能しますが、${maven.build.timestamp}はフィルタリングで置き換えられません。

このプロパティはビルドで利用できるようです-アーティファクト名を変更するために使用できます:

<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>

では、なぜリソースフィルタリングに利用できないのですか?そして、さらに重要なことは、どのようにアクセス可能にするのですか?

99
kostja

この記事 を発見しました。これは mavenのバグ により、ビルドタイムスタンプがフィルタリングに反映されないことを説明しています。回避策は、タイムスタンプを別のプロパティでラップすることです。

<properties>
   <timestamp>${maven.build.timestamp}</timestamp>
   <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>

フィルタリングは、期待どおりに機能します

buildTimestamp=${timestamp}
207
kostja

私のような他の人のためにStackoverflowコンテンツを充実させるために、この投稿は${maven.build.timestamp}の「問題」を解決する方法として見つけました。これはMavenのバグではありませんが、 この投稿 でわかるように、m2eの予期される動作です。

したがって、私が理解していることから、修正には概念的な問題が含まれるため、ソリューションが「修正」されることは期待できないと考えています。

私の場合、これで説明したように、プラグイン(buildnumber-maven-plugin)を使用しました 他の投稿

3
Bob Rivers

PomプロジェクトレベルでMavenプロパティを追加すると、正しいローカルタイムゾーンが考慮されないため、タイムスタンプが間違っているように見える場合があります。

<properties><timestamp>${maven.build.timestamp}</timestamp></properties>

Build-helper-maven-pluginを使用すると、正しいタイムゾーンと現在の夏時間がタイムスタンプに適用されます。

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.9.1</version>
            <executions>
                <execution>
                    <id>timestamp-property</id>
                    <goals>
                        <goal>timestamp-property</goal>
                    </goals>
                    <configuration>
                        <name>timestamp</name>
                        <pattern>yyyy-MM-dd HH:mm:ss</pattern>
                        <timeZone>Europe/Zurich</timeZone>
                    </configuration>
                </execution>
            </executions>
        </plugin>
     </plugins>
     <resources>
         <resource>
             <directory>src/main/resources</directory>
             <filtering>true</filtering>
         </resource>
     </resources>
 </build>

パッケージ化するとき、Mavenは/ resourcesフォルダー内のトークンのタイムスタンプを置き換えます。 resources/version.properties:

build.timestamp = $ {timestamp}

その後、このプロパティファイルをアプリケーションにロードできます。

0
skay