LoginSignup
1
0

gradleでMETA-INF/services generator

Last updated at Posted at 2023-11-27

Java 標準の Service Locator パターン

今は Spring などの DI コンテナが使用されることが多いですが、Java 標準でも疎結合を実現するために、インターフェースに合致するクラスを見つけるサービスロケーターパターンを実装したサービスプロバイダーフレームワークがありました。META-INF/services/ にクラス名を記述したプロバイダ構成ファイルを配置します。現在でも、この仕組みを使用したライブラリがあります。

gradle での設定方法

こないだ、このファイル自分で書かなあかんの? との話があったので、確認したところ、Jenkins で有名な kohsuke さんが、やっぱり? META-INF/services generator っていうのを作ってました。さすが。クラスに @MetaInfServices アノテーションを付けることで、META-INF/services/ にファイルが自動生成されます。でも、コピペできる gradle の設定が見つかんなかったので、書き残しておきます。

build.gradle
plugins {
	id 'java'
	id 'eclipse'
	// gradlew cleanEclipse eclipse で Eclipse ファクトリー・パス設定に追加される
 	// 生成先は bin/default/META-INF/services
	id 'com.diffplug.eclipse.apt' version '3.43.0'
}

sourceCompatibility = 17
tasks.withType(JavaCompile) {options.encoding = 'UTF-8'}
repositories.mavenCentral()

dependencies {
	// @MetaInfServices アノテーション
	compileOnly 'org.kohsuke.metainf-services:metainf-services:1.11'
	// アノテーション処理: gradlew build 用
 	// 生成先は build/classes/java/main/META-INF/services
	annotationProcessor 'org.kohsuke.metainf-services:metainf-services:1.11'
}

Maven リポジトリ

最新版は下記を確認してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0