【问题标题】:How can I use Dagger2 in IntelliJ on java projects如何在 Java 项目的 IntelliJ 中使用 Dagger2
【发布时间】:2015-08-13 18:11:09
【问题描述】:

我想在IntelliJ 中使用Dagger,但我不能使用它。 Dagger 使用注释处理器,我猜 IntelliJ 不知道注释处理器。

你可以看到生成的java文件,它是由Dagger2编译器生成的,但是我的java源码找不到。即使我设置build.gradle 连接我的java 文件和生成的java 文件。

这是我的全部来源project file

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    jcenter()
}

def generatedSources = "$buildDir/generated/src"
def generatedOutputDir = file("$generatedSources")

compileJava {
    doFirst {
        generatedOutputDir.exists() || generatedOutputDir.mkdirs()
        options.compilerArgs = [
                '-s', "${generatedSources}"
        ]
    }
}

sourceSets {
    main {
        java {
            srcDirs += generatedOutputDir
        }
    }
}

dependencies {
    compile "com.google.dagger:dagger:2.0"
    compile "com.google.dagger:dagger-compiler:2.0"
    compile "com.squareup:otto:1.3.8"
    compile 'io.reactivex:rxjava:1.0.13'
    compile "org.glassfish:javax.annotation:10.0-b28"

    testCompile "junit:junit:4.12"
    testCompile "org.mockito:mockito-core:1.9.5"
}

compileJava.dependsOn clean

【问题讨论】:

  • 我可以建议你在我的net.ltgt.apt 上试试 Gradle 吗? apply plugin: 'net.ltgt.aptapply plugin: 'idea``, move the dagger-compiler` 从 compilecompileOnly 的依赖关系,并删除所有 compileJavasourceSets 自定义项。该插件应该处理所有事情。
  • 你已经将 dagger-compiler 作为 compile 依赖项。它应该是apt,而不是:apt 'com.google.dagger:dagger-compiler:2.0'。这样你就可以告诉 gradle 它是一个注释处理器工具:docs.oracle.com/javase/7/docs/technotes/guides/apt
  • 谢谢@ThomasBroyer。它可以编译。但是intellij找不到依赖并显示编译后的代码。但是 gradle 编译并执行它。
  • @XtremeBiker 我无法理解预言机的适用性。如何在我的 build.gradle 中使用它?
  • @XtremeBiker 你是对的,但apt 不是 Gradle 的“原生”,它必须由插件添加(或由您自己添加,这真的不难,但需要JavaCompile 任务的一些配置,然后是 IDE;这正是我编写 net.ltgt.apt 插件的原因:以停止从一个项目到另一个项目重复自己)

标签: java intellij-idea gradle dagger annotation-processing


【解决方案1】:

我遇到了同样的问题。我发现这个 gradle 插件可以完成这项工作:

https://github.com/tbroyer/gradle-apt-plugin

事实上,它有一个关于如何将它与 dagger2 一起使用的示例。这是我所做的:

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

repositories {
    mavenCentral()
    maven { url "https://plugins.gradle.org/m2/" }
    jcenter()
}

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

dependencies {
 compile "com.google.dagger:dagger:2.4"
 apt 'com.google.dagger:dagger-compiler:2.4'

}

所有道具都应该交给插件的原作者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2020-08-06
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多