好吧,我正在迁移我的Android项目以使用Clean Architecure:
https://github.com/android10/Android-CleanArchitecture
这意味着我的部分代码在域模块中(纯Java,不依赖于Android)。对于这个项目,我使用Dagger 2,它使用注释处理器生成源代码(在编译期间)。
我的项目有以下Gradle配置:
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
configurations {
provided
}
sourceSets {
main {
compileClasspath += configurations.provided
runtimeClasspath += configurations.provided
}
test {
compileClasspath += configurations.provided
runtimeClasspath += configurations.provided
}
}
dependencies {
def domainDependencies = rootProject.ext.domainDependencies
def domainTestDependencies = rootProject.ext.domainTestDependencies
provided domainDependencies.daggerCompiler
provided domainDependencies.javaxAnnotation
compile domainDependencies.dagger
compile domainDependencies.rxJava
compile domainDependencies.joda
testCompile domainTestDependencies.junit
testCompile domainTestDependencies.assertJ
testCompile domainTestDependencies.mockito
testCompile domainTestDependencies.jMockLegacy
testCompile domainTestDependencies.commonsCsv
}
在我的测试源中,我创建了接口TestComponent,并且Dagger用于生成DaggerTestComponent。当我尝试通过命令行或Android Studio构建项目时,我收到无法找到符号的编译错误,然后:任务执行失败':domain:compileTestJava&#39 ;
我试图改变提供的'用'编译'和' testCompile'。它还没有用。
奇怪的是,在compileTestJava失败后,我可以在 domain / build / classes / test 中找到生成的DaggerTestComponent.java。那么,如果它被生成,为什么我收到这个编译错误?
请注意,此问题仅发生在测试源中,这一点非常重要。我已经在主要来源中生成了Dagger 2的来源。
更新:
我评论了每个试图使用DaggerTestComponent并试图再次构建的地方。在 domain / build / classes / test 中,现在我不仅可以找到DaggerTestComponent.java,还可以找到编译的.class。因此,它生成源文件并进行编译。为什么使用它的文件编译不起作用?这似乎是一些订单问题,比如生成的源在编译其他源时还没有准备好。
答案 0 :(得分:6)
感谢@EpicPandaForce,如果有一个纯Java的APT插件,我就开始破旧了。搜索后,我找到了这个:
https://github.com/tbroyer/gradle-apt-plugin
我刚刚应用了该插件并使用apt和testApt更改了我的依赖项。