[Gradle]サブプロジェクトの依存性を上位でも使用する方法
発生した問題
Gradleのプロジェクト間にmain <- sub
の依存関係があるときに、以下のように書き、library
をmain
でも使用しようとしましたが、読み込めない問題が発生しました
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