【Java】Gradle7.xでライブラリ参照にapiを使用する方法
以前、Gradle のバージョンアップに伴い、compile や runtime が推奨されなくなっていることをまとめました。。
あれから時は流れ、Gradle はバージョン 7.4 まで進化。
(2022 年 5 月現在)
久し振りに dependencies の設定をしてみようと思ったら既に compile は削除されているのですね。
また api も使えなくなってる気がするのですが、どうなのでしょうか。
そのあたりを検証してみましたので紹介します。
Gradleの公式サイトの情報
公式のドキュメントサイトで、compile については以下のように書かれています。
The compile and runtime configurations have been removed with Gradle 7.0. Please refer to the upgrade guide how to migrate to implementation and api configurations`.
API and implementation separation
Gradle 7.0 で完全に削除されたようですね。
implementation または api への置き換えを促されています。
その前までは、以下の定義で compile も利用可能でしたよね。
import org.gradle.api.artifacts.dsl.DependencyHandler
fun DependencyHandler.compile(dependency: Any) {
add("compile", dependency)
}
apiが利用できないケース
上記の compile は既に使えなくなくなっていますが、api についても configurationName に存在しないと怒られます。
fun DependencyHandler.api(dependency: Any) {
add("api", dependency)
}
api のメソッド利用もリファレンスに存在しない状況です。
api(dependency)
いやいや、api は使えるハズでしょ。
Configuration with name ‘api’ not found.
implementation はもちろん大丈夫。
implementation(dependency1)
implementation(dependency2)
ということで、よくよくドキュメントを読んでみると以下の 2 つのプラグイン(plugin)の違いということでした。
・java
・java-library
確かに java プラグインには api が存在しませんね。
java プラグインを使っているから api のメソッドが参照できなかったわけですね。
plugin("java")
ということで、利用用途に合わせて java と java-library のどちらのプラグインを使うか検討が必要という結論に。
kotlin の場合は kotlin プラグインですが、こちらは kotlin-library が別途あるわけではありません。
plugin("kotlin")
まとめ
Gradle 7.x 系の dependencies について調べてみました。
何気なく java プラグインを利用していましたが、api を使うには java-library が必要とのこと。
できれば依存関係を辿らなくて済むようにしたいですが、自作のライブラリなど意図的に依存関係を読み込ませたいケースもありそうです。
今回は implementation で依存関係のあるライブラリも参照させて回避しましたが、設計が悩ましいところ・・・。