buildnumber-maven-pluginを使用してプロジェクトバージョンを設定できますか?

StackOverflow https://stackoverflow.com/questions/1230015

質問

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つの部分があります:

  1. buildNumber を解決する前のバージョンに設定しようとしているため、解決された値ではなく常に $ {buildNumber} になります。

    バージョンを動的に変更しようとする代わりに、ビルドの finalName 要素に buildNumber を設定する必要があります。これにより、ローカルリポジトリに目的の名前のアーティファクトが作成されます。

  2. インストールプラグインは 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 はパッケージ化とデプロイによって認識されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top