Dagger 2不会生成组件

时间:2017-01-25 03:43:21

标签: java intellij-idea dagger-2

我完全厌倦了非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

4 个答案:

答案 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识别出匕首生成的类。

enter image description here

答案 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.30.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")
    }
}