通过遵循this文档在项目中设置领域。
下面是我的项目级别gradle:
buildscript {
repositories {
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// Realm
classpath "io.realm:realm-gradle-plugin:1.2.0"
}
app level gradle:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
dependencies {
final DAGGER_VERSION = '2.7'
....
def daggerCompiler = "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
annotationProcessor daggerCompiler
testAnnotationProcessor daggerCompiler
androidTestAnnotationProcessor daggerCompiler
compile "com.google.dagger:dagger:$DAGGER_VERSION"
provided 'org.glassfish:javax.annotation:10.0-b28' //Required by Dagger2
}
答案 0 :(得分:2)
这是Dagger 2最严重的缺点之一 - 它的错误报告非常糟糕。我经常观察到这些错误,你无法理解那条消息。
问题在于Dagger 2预处理器在javac
编译之前运行,如果代码无法处理,则预处理器会在不生成组件实现的情况下失败。据我所知,预处理器不会报告导致失败的错误。然后,当执行javac
编译时失败,因为它无法找到生成的文件,但它不会继续编译其他文件,因此您看到的唯一错误是缺少Dagger组件。
在这种情况下我做的是三步解决方案:
javac
编译将显示实际错误。我对Realm一无所知,但是因为我看到它使用自己的插件,所以你可以先改变build.gradle
中插件设备的顺序。切换这些行:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
答案 1 :(得分:0)
这个答案是基于Vasiliy之前的回答。我正在向他/她的回答宣传我的评论,以便使对我有用的解决方案更加明显。
正如Vasiliy建议的那样,扭转这些界限:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
到
apply plugin: 'realm-android'
apply plugin: 'com.neenbedankt.android-apt'
允许报告导致Dagger无法生成应用程序组件类的基础Realm错误(在我的情况下,Realm 2.x中引入了重大更改)。
解决此问题后,使用重新排序的apply plugin
行我收到此错误:
java.lang.IllegalArgumentException: XXX is not part of the schema for this Realm
通过重新排序插件,不会根据需要处理Realm注释。因此,必须将插件行恢复为:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'