我完全厌倦了非Android 应用中的Dagger 2(IDE是IntelliJ IDEA)。
的build.gradle
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-apt-plugin:0.9"
}
}
apply plugin: 'java'
apply plugin: 'net.ltgt.apt'
dependencies {
compile 'com.google.dagger:dagger:2.8'
apt 'com.google.dagger:dagger-compiler:2.8'
compileOnly 'javax.annotation:jsr250-api:1.0'
}
组件
@Component(modules = {MyModule.class}) public interface MyComponent {}
模块
@Module class MyModule {}
主要
DaggerMyComponent component = DaggerMyComponent.builder().build();
编译说
无法找到符号DaggerMyComponent
绝对没有更多的想法可能出错:(
顺便说一下,如果我运行gradlew clean build --refresh-dependencies
,就没有错误,一切都很好!
但是因为我只在IDE中使用“重建项目” - 再次出错。可能是IDEA错误(回到Eclipse的时间)?
是的,我已经将生成的类添加为内容根目录,因此IDE可以看到DaggerMyComponent
。
答案 0 :(得分:7)
我已将问题发布到JetBrains
https://youtrack.jetbrains.com/issue/IDEA-169387
,解决方案是第一次评论。
如果您使用IntelliJ内部编译器进行项目构建,则需要 在文件|中启用注释处理设置|建立,执行, 部署|编译器|注释处理器
作为替代方法,您可以将构建/运行IDE操作委派给gradle。 您可以在文件|中找到该选项设置|建立,执行, 部署|构建工具| Gradle |转轮强>
在构建 171.4073.35 Delegate IDE build/run actions to gradle
选项默认设置。
答案 1 :(得分:2)
Alexey的回答很好,但是IntelliJ只是在没有清理的情况下切换到注释处理器时遇到问题,你还需要验证是否启用了注释处理器
档案 - > 其他设置 - > 默认设置 - > 编译器 - > 注释处理器
如果启用此功能,您还可以在
中更改compiler.xml[项目根目录] /。idea / compiler.xml ,并为您的个人资料启用annotationPorcessing为true。 (检查下面从另一个stackoverflow帖子复制的图像)
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
</annotationProcessing>
</component>
确保 [文件 - &gt;在
之后使缓存和重新启动无效其他人报告说他们必须使用
应用插件:&#39; idea&#39;
在他们的gradle文件中让intellij识别出匕首生成的类。
答案 2 :(得分:0)
除了启用@ spierce7所示的注释处理之外,我的问题是我从IntelliJ的Build菜单运行 Build Project 而没有设置 Gradle - &gt; Runner 设置为委派IDE构建/运行操作以进行gradle 。从终端运行./gradlew build
并看到 build / generated 文件夹已创建后,我意识到了这一点。
另一个让我感到困惑的原因是,在我点击ide的那一部分之前,目录列表不会在IntelliJ中更新。
我删除了apply plugin: 'idea'
,但它仍然有效,因此没必要。
我不确定文件 - &gt;无效缓存和重新启动是必要的,但我确实尝试过,因为@Emanuel Seibold指出我注意到它开始工作。
答案 3 :(得分:0)
我是IntelliJ IDEA的版本2017.3.3
,0.14
插件的版本net.ltgt.apt
和Dagger版本2.14.1
,对我有用的是将以下内容添加到我的build.gradle
文件告诉IntelliJ它可以找到Dagger生成的源:
apply plugin: 'idea'
idea {
module {
sourceDirs += file("$buildDir/generated/source/apt/main")
testSourceDirs += file("$buildDir/generated/source/apt/test")
}
}