Maven-BuildNumber-Plugin SVNリビジョンは、フォーマットを使用していない場合にのみ利用可能です
-
29-09-2019 - |
質問
maven-buildnumber-plugin 1.0ベータ4を使用している間、使用しない限りSVNリビジョンを取得できるようです <format>
構成内のタグ。使用したら <format>
と <item>buildnumber</item>
タグ、自動インクリメント番号が取得されますが、SVNの改訂に対応しなくなり、それを取り戻す方法がわかりません。内でSVNリビジョン番号を使用する方法はありますか <format>
?ドキュメントはあまり明確ではありません。
解決
BuildNumber-Maven-Pluginはかなり風変わりであるため、おそらくそれがまだベータ版です。この形式は、Javaメッセージ形式を適用したいアイテムに対してのみ、ほとんどの場合、タイムスタンプと文字通りの文字列でのみ役立ちます。タイムスタンプが不要な場合は、Subversion Revision Numberを取得するときにフォーマットオプションを使用しないでください。フォーマットを使用すると、示されているように、SCMバージョン番号ではなく常に1つずつ増加するビルド番号が表示されます。
タイムスタンプが必要な場合、またはBuildNumberプラグインから派生した他のアイテムとSubversion Revisionがある場合は、それぞれを別の実行として行います。プラグインの2つの個別の実行を使用して、Subverisonリビジョン番号とビルドタイムスタンプを取得する方法の例を次に示します。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.0-beta-4</version>
<executions>
<execution>
<id>generate-buildnumber</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
<buildNumberPropertyName>buildRevision</buildNumberPropertyName>
</configuration>
</execution>
<execution>
<id>generate-timestamp</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
<items>
<item>timestamp</item>
</items>
<buildNumberPropertyName>buildDateTime</buildNumberPropertyName>
</configuration>
</execution>
</executions>
</plugin>
この作業を行うための鍵は、BuildNumberPropertyName要素を使用することです。プラグインをチェックアウトします 使用法 ページJavaメッセージ形式の有用性の詳細については、次のようになります。
他のヒント
それの見た目によって。フォーマット構成を使用する場合、デフォルトのアイテムのいずれかを使用することになります。
から ここ:
java.text.messageformatで指定されたメッセージを指定します。 これにより、読み取られる「アイテム」構成がトリガーされます
そしてから ここ:
java.text.messageformatで指定されているように、フォーマットメッセージに対応するアイテムを指定します。特別なアイテムの値は、「タイムスタンプ」と「BuildNumber/D*」です。
また、モジョのコードを見ると ここ いくつかのことがこれをサポートしています:
if ( format != null )
{
if ( items == null )
{
throw new MojoExecutionException(
" if you set a format, you must provide at least one item, "
+ "please check documentation " );
}
と:
else
{
// Check if the plugin has already run.
revision = project.getProperties().getProperty(
this.buildNumberPropertyName );
if ( this.getRevisionOnlyOnce && revision != null)
{
getLog().debug( "Revision available from previous execution" );
return;
}
その音で、あなたは新しい機能を求めています(ちなみに悪い考えではありません)。私はそれをそのように提出します ここ.
私は同じ問題に遭遇しましたが、しばらくの間、 @jean-rémyRevyが提案した解決策は機能しましたが、何らかの理由ではありませんでした。
BuildNumber-Maven-Plugin-1.2では、Scmversionと呼ばれる特別なプロパティをサポートしていることがわかりました。現在のところ、V1.2はMavenリポジトリでは利用できませんが、プラグインのWebサイトはGAであることを示唆しています。したがって、ソース(http://svn.codehaus.org/mojo/tags/buildnumber-maven-plugin-1.2/)をチェックアウトし、それを作成する必要があります($ mvnインストール)。これにより、ローカルリポジトリにプラグインがインストールされます。
この後、これを行うだけです:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}.{1}</format>
<items>
<item>timestamp</item>
<item>scmVersion</item>
</items>
</configuration>
</plugin>
プラグイン開発者によってそれが行われた説得力のある理由があります。プロジェクトのビルドタイムスタンプを取得するための推奨される方法は次のとおりです。
<project>
<properties>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
<buildDateTime>${maven.build.timestamp}</buildDateTime>
</properties>
</project>
したがって、必要なのは、そのドキュメントに従ってBuildNumber-Maven-Pluginの単一の呼び出しで非常にうまく実行できる改訂番号を取得することです。
PSは、プラグインが呼び出されるたびに2秒近くで保存されます。