2015-08-13 22 views
3

我想在IntelliJ中使用Dagger但我無法使用它。 Dagger使用註釋處理器,我猜IntelliJ不知道註釋處理器。如何在Java項目的IntelliJ中使用Dagger2

您可以看到生成的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 
+0

我可以建議你試試我的['net.ltgt.apt'](https://plugins.gradle.org/plugin/net.ltgt.apt)Gradle嗎? 'apply plugin:'net.ltgt.apt','apply plugin:'idea'',將'dagger-compiler'依賴從'compile'移動到'compileOnly',並移除所有'compileJava'和'sourceSets'自定義。該插件應該照顧一切。 –

+0

您已將匕首編譯器視爲「編譯」依賴項。它應該是'apt',而不是:'apt'com.google.dagger:dagger-compiler:2.0''。這樣你就可以告訴gradle它是一個註釋處理器工具:http://docs.oracle.com/javase/7/docs/technotes/guides/apt/ –

+0

謝謝@ThomasBroyer。它可以被編譯。但是intellij找不到依賴關係並顯示編譯後的代碼。但是gradle會編譯並執行它。 –

回答

3

我面臨同樣的問題。我發現這個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' 

} 

所有道具都應該轉到插件的原作者。

相關問題