buildnumber-maven-pluginを使用してプロジェクトバージョンを設定できますか?
-
22-07-2019 - |
質問
svn.revisionをビルド番号としてプロジェクトバージョンに追加しようとしていますが、追加できないようです。 jarの名前はパッケージングの正しい名前ですが、ローカルリポジトリにインストールされているため、バージョンが設定されたときに$ {buildNumber}が未定義/未定義のようになります。
foo-1.0.0-SNAPSHOT- 304
ではなく、foo-1.0.0-SNAPSHOT- $ {buildNumber} を取得します私が間違っていることや、プロジェクトバージョンにリビジョンを追加することは悪い考えですか?助けてくれてありがとう。
<project>
...
<version>1.0.0-${release.identifier}-${buildNumber}</version>
<properties>
<release.identifier>SNAPSHOT</release.identifier>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<id>useLastCommittedRevision</id>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</project>
解決
問題には2つの部分があります:
-
buildNumber
を解決する前のバージョンに設定しようとしているため、解決された値ではなく常に$ {buildNumber}
になります。バージョンを動的に変更しようとする代わりに、ビルドの
finalName
要素にbuildNumber
を設定する必要があります。これにより、ローカルリポジトリに目的の名前のアーティファクトが作成されます。 -
インストールプラグインは
finalName
を無視し、それを1.0.0-SNAPSHOT
としてデプロイします。それに対処する方法はわかりません。プラグインを以下のように設定すると、buildNumber
がマニフェストに追加されます。つまり、設定は次のようになります:
<version>1.0.0-${release.identifier}</version> ... <build> <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName> ... </build>
SNAPSHOT
プロジェクトでビルド番号を使用しないようにします。
Mavenは、 SNAPSHOT
キーワードを提供して、アクティブな開発の不安定なプロジェクトを示します。したがって、 SNAPSHOT
依存バージョンでプロジェクトを参照すると、Mavenは自動的に更新をチェックし、依存関係の同期を維持します。
その後、そのバージョンの最後にビルド番号を追加する場合、依存関係を手動で更新する必要があるため、 SNAPSHOT
サフィックスを持つ利点が失われます。
とにかく、可能な限りビルド番号の使用は個人的に避けています。プロジェクトを更新する必要がある場合は、バージョン番号を上げるか、 beta-2
や RC2
などのサフィックスを使用します。 SNAPSHOT
のリビジョンを追跡する必要がある場合、マニフェストに追加してビルドの作成元を確認することをお勧めしますが、標準の SNAPSHOT
サフィックスを使用してMavenがバージョンを正常に解決できるようにします。以下の設定は、マニフェストにリビジョンを追加する方法を示しています。
設定に関する限り、SCMのURLが正しく設定されていると仮定すると、問題ないように見えます。 POMにSCM構成がない場合、問題がある可能性があります。
-X
で実行して、プラグインがプロパティを設定しない理由を示すプラグインからの出力を確認できますか?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>0.9.4</version>
<executions>
<execution>
<id>useLastCommittedRevision</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<Implementation-Build>${buildNumber}</Implementation-Build>
</manifestEntries>
</archive>
</configuration>
</plugin>
他のヒント
buildnumber-maven-plugin
の後にこれを追加します:
<plugin>
<groupId>io.github.michaldo</groupId>
<artifactId>nashorn-maven-plugin</artifactId>
<version>0.0.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>eval</goal>
</goals>
<configuration>
<script>
$project.artifact.version = "${buildNumber}";
</script>
</configuration>
</execution>
</executions>
</plugin>
そして、 buildNumber
はパッケージ化とデプロイによって認識されます。