【问题标题】:Dagger 2 Annotation Processor Not Running for Java Gradle IntelliJ ProjectDagger 2 注释处理器未为 Java Gradle IntelliJ 项目运行
【发布时间】:2015-08-09 20:17:42
【问题描述】:

我正在玩 Gradle java 项目,但很难让注释处理器运行。由于某种原因,当我运行 intellij 配置(如下图所示)时,注释处理器没有运行。我假设这是因为配置将Make 命令配置为在启动前运行。注释处理器似乎在调用 assemblebuild 时运行。

调用./gradlew clean make 时,该问题可重现。我在拨打./gradlew clean assemble./gradlew clean build 时没有这个问题。解决此问题的最佳做法是什么?

【问题讨论】:

  • providedCompile 更改为compile 是否有效?您能否定义“让编译器运行”,例如它不会生成源代码还是您的 IDE 无法找到源代码?
  • 我也试过compile。我认为可能是 IntelliJ 无法找到源代码,所以我创建了一个单独的项目。我也无法在任何构建文件夹中手动找到生成的源代码。在我看来,它根本没有运行。
  • 您是否尝试过添加任务依赖项?例如make.dependsOn(build)
  • @BenManes 好主意。刚试了一下,没有用。 Error:(13, 0) Could not find property 'make' on root project 'game'.
  • 也许你会得到这个链接的帮助。 stackoverflow.com/questions/25239243/…

标签: java intellij-idea gradle dagger dagger-2


【解决方案1】:

IntelliJ 需要为项目启用注释处理。这是一张图片,详细说明了您可以为 IntelliJ 启用注释处理的位置:

首选项 > 构建、执行、部署 > 编译器 > 注释处理器 > 选中“启用注释处理”

【讨论】:

  • 嗯,我不知道您也需要在 IntelliJ 中显式启用注释处理。一旦您包含并应用了 apt 插件,它就可以在 Android 中开箱即用。很好的发现。
  • 这对我来说还是不够,我不得不选择模块内容根目录,然后手动标记生成的源文件夹
  • 这甚至不是一个选择。这个答案似乎已经过时,不再有价值。
  • @Anovative 刚刚确认答案在最新的 IntelliJ 上仍然有效
  • 感谢@spierce7 的确认。这似乎是 Google 没有包含在 Android Studio (v2.2.3) 中的内容,因为没有“编译器”类别的子类别。
【解决方案2】:
  • 确保为您的项目启用注释处理(如@spierce7 所述)
  • 还要确保 apply plugin: 'idea' 在你的 build.gradle 中

示例 build.gradle sn-p:

plugins {
    id "net.ltgt.apt" version "0.5"
}

apply plugin: 'java'
apply plugin: 'idea'

...

dependencies {
    compile 'com.google.dagger:dagger:2.10'
    apt 'com.google.dagger:dagger-compiler:2.10'
}

来自:https://github.com/tbroyer/gradle-apt-plugin(net.ltgt.apt 插件的 github)

IntelliJ IDEA

当idea插件被应用时,idea任务会自动配置 生成的文件以在 IntelliJ IDEA 中启用注释处理。

然而,当在 IntelliJ IDEA 中使用 Gradle 集成时,而不是 比想法任务,您必须手动启用注释 处理:在设置... → 构建、执行、部署 → 编译器 → 注释处理器,勾选启用注释处理和获取 来自项目类路径的处理器。模仿 Gradle 行为和 生成文件行为,可以配置生产和测试 源目录 build/generated/source/apt/main 和 build/generated/source/apt/test 分别选择 Store 生成的源相对于:模块内容根目录。

请注意,从 IntelliJ IDEA 2016.1 开始,您必须取消选中 导入项目时为每个源集创建单独的模块。

无论如何,idea插件必须应用到项目中。

从 IntelliJ IDEA 2016.3 开始,另一种方法是委托 Gradle 本身的 IDE 构建操作: https://www.jetbrains.com/idea/whatsnew/#v2016-3-gradle

【讨论】:

    【解决方案3】:

    你没有应用 APT 插件

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.3.0'
            classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    

    apply plugin: 'com.neenbedankt.android-apt'
    

    或者对于核心,它的纯 Java 替代方案:

    https://plugins.gradle.org/plugin/net.ltgt.apt

    也可以尝试使用apt 而不是providedCompile

    【讨论】:

    • 这不是安卓项目。我已经尝试过这个 gradle 插件,但结果相同。 github.com/tbroyer/gradle-apt-plugin
    • 查看dagger-plugin 和/或它的 apt 插件,它是 Java(但不是 Android)兼容的 atm。
    • 你真的添加了“应用插件”吗?这是使 APT 工作所必需的。
    • apt 插件不是必需的,虽然它做的事情有点整洁。只需编译 dagger 编译器依赖项就可以解决问题。
    • 根据我对这个问题的评论,这就是我们需要更多信息的原因。
    猜你喜欢
    • 2017-07-15
    • 2017-05-21
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多