技術系TIPS
PR

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

saratogax
記事内に商品プロモーションを含む場合があります

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

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

あわせて読みたい
Gradleのcompileは非推奨なのでimplementationかapiに置き換える
Gradleのcompileは非推奨なのでimplementationかapiに置き換える

久し振りに 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 で依存関係のあるライブラリも参照させて回避しましたが、設計が悩ましいところ・・・。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました