是否有任何方法可以让IntelliJ IDEA识别Java项目中的Dagger 2生成的类?

时间:2015-10-30 20:24:14

标签: java intellij-idea gradle dagger-2

上下文

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

我尝试了什么

我已成功在IntelliJ IDEA上运行Google sample

问题

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

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

apply plugin: 'java'

repositories {
    mavenCentral()
}

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

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

问题

有没有办法让IntelliJ IDEA将DaggerCoffeeApp_Coffee识别为生成的类(因此可以通过`ctrl + left click实现它的实现)?

8 个答案:

答案 0 :(得分:16)

Finally I made it!

I had to add the apt and the idea plugin so right now my build.gradle file look like this:

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'
}

答案 1 :(得分:12)

我发现最简单的方法:

  1. 添加for media in mediaDict { if let url = media["thumb_url"] as? String { images.append(url) } } 插件并添加Dagger2依赖项,如下所示:

    idea
  2. 打开IntelliJ的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' } :转到Annotation Processing并搜索Settings,选中启用注释处理,如下图所示:

  3. enter image description here

答案 2 :(得分:5)

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

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

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

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

答案 3 :(得分:4)

我正在使用IntelliJ IDEA的版本2017.3.30.14插件的版本net.ltgt.apt和Dagger版本2.14.1以及应用{{1} idea文件中的插件(如在Pelocho的answer中)我发现我还必须告诉IntelliJ它可以找到Dagger生成的源,如下所示:

build.gradle

答案 4 :(得分:2)

以下是适用于我的解决方案:

档案 - >项目结构 - > (在模块列表下选择您的项目) - >打开'依赖'标签

然后,点击绿色' +'签名,选择' JAR或目录'并选择' build / classes / main'文件夹中。

另一种解决方案是使用'依赖关系'将文件夹与构建类文件链接起来。在build.gradle中阻止:

https://stackoverflow.com/a/22769015/5761849

答案 5 :(得分:1)

这是我要使Idea与Dagger2和gradle一起工作所要做的。

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

    sourceDirs += file("$projectDir/out/production/classes/generated/")
    

这是我的build.gradle

的完整列表
plugins {
    id 'java'
    id 'idea'
    id "net.ltgt.apt" version "0.10"
}

idea {
    module {
        sourceDirs += file("$projectDir/out/production/classes/generated/")
    }
}

repositories {
    mavenCentral()
}

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

sourceCompatibility = 1.8

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

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

答案 6 :(得分:0)

使用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'
}

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

答案 7 :(得分:0)

我有一个类似的问题,我很长一段时间都找不到原因。

刚推出,结果令我惊讶。 IDE displays an error Intellij Idea 2018.3.6- build.gradle

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'
}