Java

【Java】Gradle7.xでライブラリ参照にapiを使用する方法

以前、Gradle のバージョンアップに伴い、compile や runtime が推奨されなくなっていることをまとめました。。

あれから時は流れ、Gradle はバージョン 7.4 まで進化。
(2022 年 5 月現在)

Gradleのcompileは非推奨なのでapiかimplementationを使う現在携わっているプロジェクトで、初めて SpringBoot を利用しています。 今回の開発言語は Kotlin でしたが、これま...

久し振りに 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`.

Gradle 7.0 で完全に削除されたようですね。

implementation または api への置き換えを促されています。

その前までは、以下の定義で compile も利用可能でしたよね。

apiが利用できないケース

上記の compile は既に使えなくなくなっていますが、api についても configurationName に存在しないと怒られます。

api のメソッド利用もリファレンスに存在しない状況です。

いやいや、api は使えるハズでしょ。

Configuration with name ‘api’ not found.

implementation はもちろん大丈夫。

ということで、よくよくドキュメントを読んでみると以下の 2 つのプラグイン(plugin)の違いということでした。

・java
・java-library

確かに java プラグインには api が存在しませんね。

java プラグインを使っているから api のメソッドが参照できなかったわけですね。

ということで、利用用途に合わせて java と java-library のどちらのプラグインを使うか検討が必要という結論に。

kotlin の場合は kotlin プラグインですが、こちらは kotlin-library が別途あるわけではありません。

まとめ

Gradle 7.x 系の dependencies について調べてみました。

何気なく java プラグインを利用していましたが、api を使うには java-library が必要とのこと。

できれば依存関係を辿らなくて済むようにしたいですが、自作のライブラリなど意図的に依存関係を読み込ませたいケースもありそうです。

今回は implementation で依存関係のあるライブラリも参照させて回避しましたが、設計が悩ましいところ・・・。