使用Dagger 1.2.2,Gradle 2.4,Eclipse 4.5.0 Mars进行注释处理失败

pdx*_*_nr 5 java eclipse dagger

Dagger 1.2.2,Gradle 2.4,Eclipse 4.5.0 Mars on OSX 10.9.5.

在Eclipse中尝试运行JUnit测试失败:"请确保为此模块运行代码生成."

这是Eclipse中的Gradle项目,其版本如上所示.

JUnit测试从命令行成功运行("./gradlew clean test").

项目属性:Java编译器:注释处理显示:选中所有复选框.生成的代码转到.apt_generated.未指定处理器选项.

项目属性:Java编译器:注释处理:工厂路径显示:存在并检查dagger-compiler-1.2.2.jar,存在并检查javawriter-2.5.0,存在并检查dagger-1.2.2.jar.

org.eclipse.jst.ws.annotations.core存在但未检查(检查它和重建似乎没有任何区别).

"已检查"的罐子都是从我的〜/ .gradle/caches目录中获取的.

.apt_generated目录中没有任何内容(我收集生成的类文件应该出现在那里;我从未见过.)

思考?[编辑:添加缺失的单词"line"]

Far*_*jmi 0

要从 gradle 脚本中自动解决此问题,并且对于多项目 gradle 项目中的所有项目,您可以这样做。

  1. 定义一个 eclipse.gradle 文件,包含以下基于 gradle eclipse 插件的配置
//generate eclipse .project, .classpath, .factorypath files
//References: https://github.com/mkarneim/pojobuilder/wiki/Enabling-PojoBuilder-for-Eclipse-Using-Gradle
apply plugin: 'eclipse'

ext { 
    eclipseAptFolder = '.apt_generated'
    eclipseSettingsDir = file('.settings')
}

configurations {
    codeGeneration
}    

dependencies {
    codeGeneration 'com.squareup.dagger:dagger-compiler:1.2.2'
    compile 'com.squareup.dagger:dagger:1.2.2'
}
compileJava.classpath += configurations.codeGeneration

eclipse {
    jdt.file.withProperties { 
        it['org.eclipse.jdt.core.compiler.processAnnotations'] = 'enabled'
    }
}

tasks.eclipseJdt {
    doFirst {
        def aptPrefs = file("${eclipseSettingsDir}/org.eclipse.jdt.apt.core.prefs")
        aptPrefs.parentFile.mkdirs()

        aptPrefs.text = """\
    eclipse.preferences.version=1
    org.eclipse.jdt.apt.aptEnabled=true
    org.eclipse.jdt.apt.genSrcDir=${eclipseAptFolder}
    org.eclipse.jdt.apt.reconcileEnabled=true
    """.stripIndent()

        file('.factorypath').withWriter {
            new groovy.xml.MarkupBuilder(it).'factorypath' {
                project.configurations.codeGeneration.each { dep->
                    factorypathentry(
                        kind:'EXTJAR',
                        id:dep.absolutePath,
                        enabled:true,
                        runInBatchMode:false
                    )
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 将 eclipse.gradle 文件应用到您的所有项目。这是我在根项目中执行此操作的方法:
allprojects {
    apply plugin: 'java'    
    apply from: rootProject.projectDir.toString() + '/eclipse.gradle'    
}
Run Code Online (Sandbox Code Playgroud)
  1. 运行 eclipseJdt 任务 (gradele eclipseJdt) 并生成 .factorypath eclipse 文件,其中包含 eclipse 使用 Dagger 编译器作为注释处理器所需的所有配置
  2. 在 Eclipse 中导入或刷新项目并继续工作:-)