web-dev-qa-db-ja.com

jarバージョンにgit commit hashを含める

私はmavenを使用しています。私の目標は、バージョン番号にgitコミットハッシュを含めることです。 1.1。{git_hash}のようなもの。

私はこれをフォローしようとしています チュートリアル

Q:pomファイルのバージョン要素で指定されたバージョン番号を何らかの方法でオーバーライドすることは可能ですか?

15
Herr Kater

これを実現する1つの方法は、 git-commit-id-plugin を使用することです。これをpom.xmlのbuildセクションのプラグインのリストに追加します。

<plugin>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
    <version>${git-commit-id-plugin.version}</version>
    <executions>
        <execution>
            <id>get-the-git-infos</id>
            <goals>
                <goal>revision</goal>
            </goals>
            <phase>validate</phase>
        </execution>
    </executions>
    <configuration>
        <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
    </configuration>
</plugin>

フェーズをvalidateに変更したので、アーティファクトがパッケージ化された時点でリビジョン番号プロパティがすでに利用可能であることに注意してください。

次に、buildセクションに次を追加します。

<build>
    <finalName>${project.artifactId}-${project.version}-${git.commit.id.describe-short}</finalName>
    <!-- your list of plugins -->
</build>

git.commit.id.describe-shortプロパティは、git-commit-id-pluginによって生成されます。現在のgitリビジョン番号(7桁に短縮)とオプションのdirtyインジケーターが含まれています。

生成されるアーティファクトは次のようになります:examplelib-1.0.2-efae3b9.jar(または、リポジトリにコミットされていない変更がある場合はexamplelib-1.0.2-efae3b9-dirty.jar)。

また、この情報をアーティファクトのMANIFEST.MFに配置することもできます。そのような場合、これをプラグインのリストに追加します(例では、アーティファクトがjarであると想定しています):

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifestEntries>
                <SCM-Revision>${git.commit.id.describe-short}</SCM-Revision>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

追加のコメント:

  1. git-commit-id-pluginの簡単な構成を示しました。彼らのサイトには、さらに多くのオプションとプロパティがあります。プラグインは、pom.xml内で使用できるプロパティに加えて、リビジョンに関する情報を含むプロパティファイルを生成することもできます。

  2. git-commit-id-pluginの代わりに、 buildnumber-maven-plugin を好むかもしれません。リビジョン番号を取得するために、このプラグインには [〜#〜] scm [〜#〜] プラグインもpom.xmlで設定する必要があります。

  3. このセットアップは、アーティファクトを変換または名前変更する他のプラグインと干渉する可能性があります(私の場合はmaven-shade-pluginでした-生成するソースjarの1つに適切なリビジョン番号が含まれていませんでした)。

29
user3078523

上記の受け入れられた答えは私にとってはうまくいきませんでした。リンクを見つけました https://dzone.com/articles/maven-git-commit-id-plugin 、ここからプラグインコードをコピーしました。私にとっては初めてでした。これで、ターゲットJARファイルにgit.propertiesファイルが自動的に含まれるようになりました。追跡に非常に便利です。

<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.4</version>
<executions>
    <execution>
        <id>get-the-git-infos</id>
        <goals>
            <goal>revision</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
    <prefix>git</prefix>
    <verbose>false</verbose>
    <generateGitPropertiesFile>true</generateGitPropertiesFile>
    <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
    <format>json</format>
    <gitDescribe>
        <skip>false</skip>
        <always>false</always>
        <dirty>-dirty</dirty>
    </gitDescribe>
</configuration>

ビルドセクションにfinalNameを追加して、ターゲットファイル名にもバージョンを含める

<build>

<finalName>${project.artifactId}-${project.version}-${git.commit.id.describe-short}</finalName>

...

</build>
0
DAB