有没有办法让IntelliJ IDEA在Java项目中识别Dagger 2生成的类?

有没有办法让IntelliJ IDEA在Java项目中识别Dagger 2生成的类?,java,intellij-idea,gradle,dagger-2,Java,Intellij Idea,Gradle,Dagger 2,上下文 我已经用java启动了一个个人项目,Gradle作为构建系统,我想使用Dagger 2作为DI。这样做的主要原因是要习惯这个库,并且能够在更大的项目中轻松地使用它 我试过什么 我成功地在IntelliJ IDEA上运行 问题 IntelliJ IDEA一直告诉我,在本例中,它无法解析生成的类DaggerOffeeApp_Coffee。特别是在学习使用Dagger 2时,如果不知道编写的代码是否正确,那就有点烦人了 所有java类都与。这是我的build.gradle文件: 问题: 有没有

上下文

我已经用java启动了一个个人项目,Gradle作为构建系统,我想使用Dagger 2作为DI。这样做的主要原因是要习惯这个库,并且能够在更大的项目中轻松地使用它

我试过什么

我成功地在IntelliJ IDEA上运行

问题

IntelliJ IDEA一直告诉我,在本例中,它无法解析生成的类DaggerOffeeApp_Coffee。特别是在学习使用Dagger 2时,如果不知道编写的代码是否正确,那就有点烦人了

所有java类都与。这是我的build.gradle文件:

问题:

有没有办法让IntelliJ IDEA将DaggerOffeeAppCoffee识别为一个生成的类,从而可以通过“ctrl+左键单击”进入其实现

我终于成功了

我必须添加apt和idea插件,因此现在我的build.gradle文件如下所示:

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "net.ltgt.gradle:gradle-apt-plugin:0.4"
    }
}

apply plugin: "net.ltgt.apt"
apply plugin: 'java'
apply plugin: 'idea'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile 'com.google.dagger:dagger:2.0.1'
    apt 'com.google.dagger:dagger-compiler:2.0.1'
}

以下是对我有效的解决方案:

文件->项目结构->在模块列表下选择项目->打开“依赖项”选项卡

然后,单击绿色“+”符号,选择“JARs或directory”并选择“build/classes/main”文件夹

另一种解决方案是使用build.gradle中的“dependencies”块将文件夹与生成类文件链接:


您必须在IntelliJ中手动启用注释处理

从:设置->构建、执行、部署->编译器->注释处理器->启用注释处理并从项目类路径获取处理器

然后重建项目,您将在项目中找到生成的类

请注意,我在java android项目中使用了此解决方案。

我发现的最简单的方法:

添加idea插件并添加Dagger2依赖项,如下所示:

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

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

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile 'com.google.dagger:dagger:2.11'
    apt 'com.google.dagger:dagger-compiler:2.11'
}
启用IntelliJ的批注处理:转到“设置”并搜索批注处理器,选中“启用批注处理”,如下图所示:

我正在使用IntelliJ IDEA的2017.3.3版、net.ltgt.apt插件的0.14版和Dagger的2.14.1版,并在build.gradle文件中应用IDEA插件,就像Pelocho的《我发现》一样,我还必须告诉IntelliJ在哪里可以找到Dagger生成的源,如下所示:

apply plugin: 'idea'
idea {
    module {
        sourceDirs += file("$buildDir/generated/source/apt/main")
        testSourceDirs += file("$buildDir/generated/source/apt/test")
    }
}

这就是我必须要做的,以获得与Dagger2和gradle合作的想法

打开注释处理,如上面的答案所示。 将以下内容添加到build.gradle文件中,以便Idea将生成的类视为源

sourceDirs += file("$projectDir/out/production/classes/generated/")
下面是我的build.gradle的完整列表

此外,我还必须将以下gradle任务添加到build.gradle文件中,以清除我的out目录。当我移动一些文件并Dagger2重新生成源文件时,out目录没有被清除:。我还将此任务包括在运行配置中,以便在重建项目之前触发它

task clearOutFolder(type: Delete) {
    delete 'out'
}

使用IntelliJ IDEA 2019.1和Gradle 5.4.1,这似乎足够了:

plugins {
    id 'java'
}

version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testImplementation group: 'junit', name: 'junit', version: '4.12'

    implementation 'com.google.dagger:dagger:2.23.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
}

不过,我不知道该解决方案适用的最低版本。

我也有类似的问题,我很长时间都无法找到原因

刚开始,结果让我吃惊。 Intellij Idea 2018.3.6- build.gradle:


在成功编译应用程序一次后,您应该能够继续。只需将您的文本光标放在DaggerOffeeApp_咖啡行中,然后使用Ctrl+B。事实上,该应用程序已编译,我成功运行了它。我可以在build/generated/src/coffee/中看到生成的类,但IntelliJ一直告诉我它无法解决DaggerOffeeApp_coffee添加“idea”插件修复了它-我有一个旧的net.ltgt.gradle:gradle apt插件版本导致我出现在这里-将它设置为最新的修复版本。和我一起欢呼。Jazakallah。这可能有助于Android项目,但在我们的案例中对服务器应用程序没有影响。不知道为什么你会被否决。这是唯一对meI有效的方法。我使用上述加上设置sourceDirs,testSourceDirs,但发现文件>无效缓存/重新启动有时也有必要或删除。idea并重新打开项目[丢失设置]IntelliJ需要做的其他事情,以便识别类并深入链接到它,以便我们可以在单击类名时转到源代码,我需要通过右键单击/out/production//generated directory并将目录标记为->generated sources Root,将相应的generated sources目录设置为generated sources
task clearOutFolder(type: Delete) {
    delete 'out'
}
plugins {
    id 'java'
}

version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testImplementation group: 'junit', name: 'junit', version: '4.12'

    implementation 'com.google.dagger:dagger:2.23.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
}
plugins {
    id "java"
}
sourceCompatibility = 1.8
repositories {
    mavenCentral()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile 'com.google.dagger:dagger:2.11'
    apt 'com.google.dagger:dagger-compiler:2.11'
}