技術と日常。

日々の気が付いたこと・気になったことを残しておきます。

[Gradle]サブプロジェクトの依存性を上位でも使用する方法

発生した問題

Gradleのプロジェクト間にmain <- sub の依存関係があるときに、以下のように書き、librarymainでも使用しようとしましたが、読み込めない問題が発生しました

dependencies {
    implementation project(':sub')
}

main/build.gradle

dependencies {
    implementation 'library'
}

sub/build.gradle

解決法

調べたところ、implementationではなくapiを使用すればよいことがわかりました

dependencies {
    api 'library'
}

sub/build.gradle

まとめ

config クラスパス追加 ビルド出力 上位モジュールへ公開 補足
implementation × 依存が他のモジュールに伝搬しない
ビルド時間が大幅に短縮される
基本はこれを使用することを推奨
api 最強だが依存性が増える
implementationよりビルド時間も増える
慎重に用いる必要がある
compileOnly × × コンパイルに必要だが実行時に必要ない場合
PaaSにライブラリが用意されいる場合など
上位への伝搬が必要ならcompileOnlyApi
runtimeOnly × × コンパイルには必要ないが実行時に必要な場合

参考

Gradleのimplementationとapiの違いメモ - Qiita

Add build dependencies  |  Android Developers

The Java Library Plugin