1概要

このチュートリアルでは、Mavenで構築されたSpring BootベースのアプリケーションにGitリポジトリ情報を注入する方法を説明します。

これを行うために、https://github.com/ktoso/maven-git-commit-id-plugin[maven-git-commit-id-plugin] – この目的のためだけに作成された便利なツールを使用します。


2 Mavenの依存関係

プロジェクトの

pom.xml

ファイルの

<plugins>

セクションにプラグインを追加しましょう。

<plugin>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
    <version>2.2.1</version>
</plugin>

最新バージョンはhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22pl.project13.maven%22%20AND%20a%3A%22git-commit-id-plugin %22[ここ]

このプラグインには少なくとも3.1.1バージョンのMavenが必要であることに注意してください。


3構成

プラグインはその機能を拡張する多くの便利なフラグと属性を持っています。このセクションでは、それらのいくつかについて簡単に説明します。それらすべてを知りたい場合は、maven-git-commit-id-pluginのhttps://github.com/ktoso/maven-git-commit-id-plugin[page]にアクセスしてください。例に直接進み、セクション4 ** に進んでください。

次のスニペットにはプラグイン属性の例が含まれています。必要に応じて

<configuration> </configuration>

セクションにそれらを指定してください。


3.1. 見つからないリポジトリ

Gitリポジトリが見つからない場合はエラーを除外するように設定できます。

<failOnNoGitDirectory>false</failOnNoGitDirectory>


3.2. Gitリポジトリの場所

カスタムの

.git

リポジトリの場所を指定する場合は、

dotGitDirectory

属性を使用します。

<dotGitDirectory>${project.basedir}/submodule__directory/.git</dotGitDirectory>


3.3. 出力ファイル

カスタムの名前やディレクトリを持つプロパティファイルを生成するには、次のセクションを使用してください。

<generateGitPropertiesFilename>
    ${project.build.outputDirectory}/filename.properties
</generateGitPropertiesFilename>


3.4. 冗長性

より寛大なロギングのために

<verbose>true</verbose>


3.5. プロパティファイルの生成


git.properties

ファイルの作成を無効にすることができます。

<generateGitPropertiesFile>false</generateGitPropertiesFile>


3.6. プロパティのプレフィックス

カスタムプロパティのプレフィックスを指定したい場合は、次のようにします。

<prefix>git</prefix>


3.7. 親リポジトリのみ

サブモジュールを持つプロジェクトで作業するときは、このフラグを設定することで、そのプラグインが親リポジトリに対してのみ機能することを確認します。

<runOnlyOnce>true</runOnlyOnce>


3.8. プロパティ除外

リポジトリのユーザー情報などの機密データを除外したい場合があります。

<excludeProperties>
    <excludeProperty>git.user.** </excludeProperty>
</excludeProperties>


3.9. プロパティインクルージョン

指定されたデータのみを含めることも可能です。

<includeOnlyProperties>
    <includeOnlyProperty>git.commit.id</includeOnlyProperty>
</includeOnlyProperties>

** 4サンプルアプリケーション

私たちのプロジェクトに関する基本的な情報を返すサンプルRESTコントローラーを作成しましょう。

Spring Bootを使ってサンプルアプリを作成します。 Spring Bootアプリケーションの設定方法がわからない場合は、紹介記事を参照してください。

アプリは

Application



CommitIdController

の2つのクラスで構成されます


4.1. 応用


CommitIdApplication

がアプリケーションのルートとして機能します。

@SpringBootApplication(scanBasePackages = { "com.baeldung.git" })
public class CommitIdApplication {

    public static void main(String[]args) {
        SpringApplication.run(CommitIdApplication.class, args);
    }

    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
        PropertySourcesPlaceholderConfigurer propsConfig
          = new PropertySourcesPlaceholderConfigurer();
        propsConfig.setLocation(new ClassPathResource("git.properties"));
        propsConfig.setIgnoreResourceNotFound(true);
        propsConfig.setIgnoreUnresolvablePlaceholders(true);
        return propsConfig;
    }
}

アプリケーションのルートを設定する以外に、プラグインによって生成されたプロパティファイルにアクセスできるように

PropertyPlaceHolderConfigurer

Beanを作成しました。

Springが

git.properties

ファイルを解決できなくてもアプリケーションがスムーズに実行されるように、いくつかのフラグも設定します。


4.2. コントローラ

@RestController
public class CommitInfoController {

    @Value("${git.commit.message.short}")
    private String commitMessage;

    @Value("${git.branch}")
    private String branch;

    @Value("${git.commit.id}")
    private String commitId;

    @RequestMapping("/commitId")
    public Map<String, String> getCommitId() {
        Map<String, String> result = new HashMap<>();
        result.put("Commit message",commitMessage);
        result.put("Commit branch", branch);
        result.put("Commit id", commitId);
        return result;
    }
}

ご覧のとおり、Gitプロパティをクラスフィールドに注入しています。

利用可能なすべてのプロパティを確認するには、

git.properties

ファイルまたは著者のGithub

page

を参照してください。また、HTTP GETリクエストで、注入された値を含むJSON__で応答する単純なエンドポイントも作成しました。


4.3. Maven Entry

最初に、プラグインによって実行される実行手順と、私たちが有用と考えるその他の設定プロパティを設定します。

<plugin>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
            <id>get-the-git-infos</id>
            <goals>
                <goal>revision</goal>
            </goals>
        </execution>
        <execution>
            <id>validate-the-git-infos</id>
            <goals>
                <goal>validateRevision</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- ... -->
    </configuration>
</plugin>

コードが正しく機能するためには、クラスパスに

__git.properties

__fileを含める必要があります。これを実現するために、2つの選択肢があります。

最初のものはファイルを生成するためにプラグインに任せることです。これを指定するには、

generateGitPropertiesFile

設定プロパティを

true

値に設定します。

<configuration>
    <generateGitPropertiesFile>true</generateGitPropertiesFile>
</configuration>

2番目の選択肢は、

git.properties

ファイルを自分自身のリソースフォルダーに含めることです。プロジェクトに使用するエントリのみを含めることができます。

# git.properties
git.tags=${git.tags}
git.branch=${git.branch}
git.dirty=${git.dirty}
git.remote.origin.url=${git.remote.origin.url}
git.commit.id=${git.commit.id}
git.commit.id.abbrev=${git.commit.id.abbrev}
git.commit.id.describe=${git.commit.id.describe}
git.commit.id.describe-short=${git.commit.id.describe-short}
git.commit.user.name=${git.commit.user.name}
git.commit.user.email=${git.commit.user.email}
git.commit.message.full=${git.commit.message.full}
git.commit.message.short=${git.commit.message.short}
git.commit.time=${git.commit.time}
git.closest.tag.name=${git.closest.tag.name}
git.closest.tag.commit.count=${git.closest.tag.commit.count}
git.build.user.name=${git.build.user.name}
git.build.user.email=${git.build.user.email}
git.build.time=${git.build.time}
git.build.host=${git.build.host}
git.build.version=${git.build.version}

Mavenはプレースホルダーを適切な値に置き換えます。

注:このプラグインではうまく動作しないIDEもあります。上記のようにプロパティを定義すると、ブートストラップで「循環型のプレースホルダ参照」エラーが発生することがあります。

起動して

localhost:8080/commitId

を要求すると、次のような構造のJSONファイルが表示されます。

{
    "Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6",
    "Commit branch":"commit__id__plugin",
    "Commit message":"Merge branch 'master' into commit__id__plugin"
}


5 Spring Boot Actuator

との統合

プラグインは

Spring Actuator

で簡単に使えます。


documentation

で読むことができるように、

GitInfoContributor

は利用可能であれば

git.properties

ファイルを選択します。

そのため、デフォルトのプラグイン設定では、

/info

endpointを呼び出すとGit情報が返されます。

{
  "git": {
    "branch": "commit__id__plugin",
    "commit": {
      "id": "7adb64f",
      "time": "2016-08-17T19:30:34+0200"
    }
  }
}


6. 結論

このチュートリアルでは、https://github.com/ktoso/maven-git-commit-id-plugin[maven-git-commit-id-plugin]を使用する基本を示し、それを使用する簡単なSpring Bootアプリケーションを作成しました。プラグインによって生成されたプロパティの一覧。

提示された設定はすべての利用可能なフラグと属性をカバーしていません、しかしそれはこのプラグインを使い始めるのに必要なすべての基本をカバーしています。

あなたはhttps://github.com/eugenp/tutorials/tree/master/spring-boot/src/main/java/com/baeldung/git[Github]でコード例を見つけることができます。