Spring Boot Gradle PluginとSpringBootのバージョンの関係

Spring Boot Gradle PluginのバージョンはSpring Bootのバージョンと対応しています。プラグインをフォークすることでプラグインのバージョンのみを変更することができました。
2021.01.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

SpringBoot Gradle Plugin はSpring Bootを使うGradleプロジェクトで必要なタスクを提供してくれる便利なプラグインです。特にdependency-management-pluginと組み合わせた時には必要なライブラリをバージョン指定なしでプロジェクトの依存ライブラリとして追加することができます。

Spring Boot Gradle PluginとSpring Bootのバージョンの関係

Spring Boot Gradle Plugin を使ったときに追加されるSpring Boot のバージョンはプラグインと同じになります。例えば、プラグインバージョン 2.4.2 を使えば Spring Bootのバージョンも 2.4.2になります。

プラグインのバージョンだけ変えたい

いろいろな事情でプラグインのバージョンだけ変えたかったのでやってみました。

バージョンはどこで定義されているか

プラグインがプロジェクトに追加するライブラリのバージョンはSpringBootPlugin.javaで定義されています。具体的にはSPRING_BOOT_VERSION に対応するspring-boot-dependencies bomをインポートしています。

/**
	 * The coordinates {@code (group:name:version)} of the
	 * {@code spring-boot-dependencies} bom.
	 */
	public static final String BOM_COORDINATES = "org.springframework.boot:spring-boot-dependencies:"
			+ SPRING_BOOT_VERSION;

SPRING_BOOT_VERSIONは同ファイルに定義されていて、Jarファイルに含まれているバージョン情報を参照しています。

private static final String SPRING_BOOT_VERSION = VersionExtractor.forClass(DependencyManagementPluginAction.class);

プラグインを改変する

上記のバージョンは定数で定義されDependencyManagementPluginActionによって自動でインポートされるためこの挙動を変更することはできません。

そのため今回はプラグインを改変して使用することにしました。

buildSrcにプラグインのソースコードを配置する

Gradleではプロジェクト内のbuildSrcというディレクトリにプラグインのソースコードを配置することで、ビルド時に利用することができます(詳しくはこちら「Use buildSrc to abstract imperative logic」を参照)

今回はGitHubからクローンした任意のプラグインのバージョンのコードをコピーしました。具体的なコードは掲載しませんがbuild.gradleに以下の変更が必要でした。

  • 定義されているプラグインを削除
  • ドキュメント関連のタスクを削除
  • 依存ライブラリのバージョンが明示されていないので、mvnrepository.com に掲載されているバージョン情報を参考して修正

まとめ

Spring Boot Gradle PluginのバージョンはSpring Bootのバージョンと対応しています。プラグインをフォークすることでプラグインのバージョンのみを変更することができました。 バージョン変更できましたが、かなり手間がかかるワークアラウンドなのでSpringBootごとバージョンを変更できるならその方がいいと思います。