https://github.com/google/dagger/issues/970
https://github.com/google/dagger/releases/tag/dagger-2.29.1
Dagger 2.29からvalidateTransitiveComponentDependencies オプションが実装されたので、それの使い方の説明。
ここのサンプルでは、Dagger 2.29.1を使っています。
kaptを使っている場合は、次のようにトップのbuild.gradleに指定します
allprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kapt {
javacOptions {
option("-Adagger.validateTransitiveComponentDependencies=DISABLED")
}
}
}
}
(app → lib1 → lib2 をimplementationで依存を指定しています。)
上記オプションを指定することで、次のように書くことが出来るようになりました。
// appモジュール
@Component(
dependencies = [Lib1Component::class]
)
interface AppComponent
// lib1モジュール
@Component
interface Lib1Component {
fun lib1(): Lib1
}
class Lib1 @Inject constructor(
private val lib2: Lib2
)
// lib2モジュール
class Lib2 @Inject constructor()
今までだと、appモジュールからLib2クラスを直接参照できなかったため、エラーになっていたのが、エラーが出なくなりました😁