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

时间:2015-08-10 03:50:27

标签: 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”]

2 个答案:

答案 0 :(得分:2)

这里的另一位开发人员知道这个问题的答案:

打开使用Dagger的项目的属性(使用项目上下文菜单,而不是主菜单)。

转到 Java编译器:注释处理

取消选中启用注释处理复选框。

点击应用。系统会提示您重建整个项目;是

重新选择启用注释处理复选框。应用。重建项目。

生成的类现在应该出现在.apt_generated。

我不确切知道这可能与项目中的 Build Automatically 设置如何相互作用,但我认为将此称为Eclipse中的错误是安全的。我将看到针对Eclipse提交错误。

答案 1 :(得分:0)

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

  1. 定义eclipse.gradle文件以包含基于gradle eclipse插件的以下配置
  2. //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
                        )
                    }
                }
            }
        }
    }
    
    1. 将eclipse.gradle文件应用于您的所有项目。以下是我在根项目中的工作方式:
    2. allprojects {
          apply plugin: 'java'    
          apply from: rootProject.projectDir.toString() + '/eclipse.gradle'    
      }
      
      1. 运行eclipseJdt任务(gradele eclipseJdt)并生成.factorypath eclipse文件,其中包含eclipse使用Dagger Compiler作为注释处理器所需的所有配置
      2. 在eclipse中导入或刷新项目并重新开始工作: - )