Обработка аннотаций не работает с Dagger 1.2.2, Gradle 2.4, Eclipse 4.5.0 Mars

Кинжал 1.2.2, Gradle 2.4, Eclipse 4.5.0 Mars на OSX 10.9.5.

Попытка запустить тест JUnit не удалась в Eclipse: «Пожалуйста, убедитесь, что для этого модуля была запущена генерация кода».

Это проект Gradle в Eclipse с версиями, показанными выше.

Тесты JUnit успешно запускаются из командной строки ("./gradlew clean test").

Свойства проекта: Компилятор Java: Обработка аннотаций показывает: все флажки отмечены. Сгенерированный код попадает в .apt_generated. Параметры процессора не указаны.

Свойства проекта: Компилятор Java: Обработка аннотаций: Factory Путь показывает: 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 ничего не появляется (я понимаю, что там должны появиться сгенерированные файлы классов; я никогда их не видел).

Мысли? [Редактировать: добавлено пропущенное слово "строка"]


person pdx_jjb_nr    schedule 10.08.2015    source источник
comment
Я попытался добавить java.inject.jar в Factory Path, как указано здесь: stackoverflow.com/questions/19555023/, но это не помогло.   -  person pdx_jjb_nr    schedule 10.08.2015


Ответы (2)


Чтобы решить эту проблему автоматически из сценариев Gradle и для всех проектов в многопроектном проекте Gradle, это то, что вы можете сделать.

  1. Определите файл eclipse.gradle, чтобы включить следующую конфигурацию на основе плагина eclipse gradle.
//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 ко всем вашим проектам. Вот как я это делаю в своем корневом проекте:
allprojects {
    apply plugin: 'java'    
    apply from: rootProject.projectDir.toString() + '/eclipse.gradle'    
}
  1. запустите задачу eclipseJdt (gradele eclipseJdt) и сгенерируйте файл eclipse .factorypath, который содержит всю конфигурацию, необходимую для eclipse для использования компилятора Dagger в качестве процессора аннотаций.
  2. Импортируйте или обновите проект в eclipse и вернитесь к работе :-)
person Farrukh Najmi    schedule 11.03.2016
comment
Или вы можете использовать мой net.ltgt.apt плагин, который сделает все это за вас ;-) gradle eclipseFactorypath eclipseApt если вы используете buildship, gradle eclipse иначе. - person Thomas Broyer; 14.03.2016

Другой разработчик здесь знал ответ на этот вопрос:

Откройте свойства проекта, который использует Dagger (используйте контекстное меню проекта, а не главное меню).

Перейдите в раздел Компилятор Java: обработка аннотаций.

Снимите флажок Включить обработку аннотаций.

Нажмите Применить. Вам будет предложено перестроить весь проект; да.

Снова установите флажок Включить обработку аннотаций. Подать заявление. Перестройте проект.

Сгенерированные классы теперь должны появиться в .apt_generated.

Я точно не знаю, как это может взаимодействовать с параметром Build Automatically в проекте, но я думаю, что это можно с уверенностью назвать ошибкой в ​​Eclipse. Я позабочусь о регистрации ошибки в Eclipse.

person pdx_jjb_nr    schedule 10.08.2015
comment
В мультипроекте Gradle кажется, что нужно выполнять настройку обработки аннотаций для каждого проекта, а не просто делать это на верхнем уровне. В большом проекте это очень утомительно. Кто-нибудь знает, как это сделать один раз? - person Farrukh Najmi; 11.03.2016
comment
У вас должен быть установлен m2e-apt, чтобы это работало прозрачно. Возможно, вам придется установить его в Eclipse вручную. - person Thorbjørn Ravn Andersen; 16.08.2016