2

マルチプロジェクトのGradleビルドがあります。にSub-Project-A依存していSub-Project-Bます。Sub-Project-Bにコンパイル時の依存関係がありSLF4Jます。ライブラリに対してコンパイルできるようにしたくはありませが、実行時にコードを実行できるようにしたいと考えています。Sub-Project-ASLF4JSub-Project-B

私ができると思ったのは、コンパイル時の依存関係を Sub-Project-B に追加してから、次を追加することです。

configurations {
  compile.exclude group: 'org.slf4j'
}

サブプロジェクト A へ。これにより、コードが slf4j API に対してコンパイルされなくなりますが、slf4j ライブラリがサブプロジェクト A ランタイムに存在することも防止されるため、コードSub-Project-Bがアクセスされるとすぐに ClassNotFoundException が発生します。

これを機能させるのは非常に困難だったので、何か間違ったことをしているに違いないと思いますが、これは不合理な設定のようには感じません。ビルド内のサブプロジェクトの 1 つだけが、コンパイル時にサード パーティのライブラリにアクセスできるようにします。

4

2 に答える 2

4

除外してから再度含める必要があると思います。1 つのステップでこれを行う方法がわかりません。

erdi のソリューションのわずかな変更として、B の依存関係全体を A のランタイム構成に再含めることができます。

dependencies {
    compile(project(':A')) {
        exclude group: 'org.slf4j'
    }
    runtime project(':A')
}

それは少し少ない繰り返しです。

于 2013-04-18T12:13:30.363 に答える