2017-01-25 6 views
8

Я полностью измучен кинжалом 2 в не-Android приложение (IDE is IntelliJ IDEA).Кинжал 2 не генерирует компонент

build.gradle

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

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

dependencies { 
    compile 'com.google.dagger:dagger:2.8' 
    apt 'com.google.dagger:dagger-compiler:2.8' 
    compileOnly 'javax.annotation:jsr250-api:1.0' 
} 

Компонент

@Component(modules = {MyModule.class}) public interface MyComponent {} 

Модуль

@Module class MyModule {} 

Главная

DaggerMyComponent component = DaggerMyComponent.builder().build(); 

Компилятор говорит

не может найти символ DaggerMyComponent

Абсолютно нет больше идей, что может быть не так :(

Кстати, если я бегу gradlew clean build --refresh-dependencies, нет ошибки, все в порядке!

Но поскольку я снова использую «Проект перестройки» в IDE - ошибка. Возможно, ошибка IDEA (время, чтобы вернуться в Eclipse)?

И да, я добавил каталог с сгенерированными классами в качестве корня содержимого, поэтому среда IDE может видеть DaggerMyComponent.

ответ

3

я был вывесить вопрос к JetBrains

https://youtrack.jetbrains.com/issue/IDEA-169387

и решение в первом комментарии.

Если вы используете IntelliJ внутренний компилятор для сборки проекта вам необходимо включить обработку аннотаций в File | Настройки | Build, Execution, Развертывание | Компилятор | Обработчики аннотаций

В качестве альтернативы вы можете делегировать выполнение/выполнение действий IDE для градиента. Вы можете найти этот вариант на Файл | Настройки | Build, Execution, Развертывание | Строительный инструмент | Gradle | Runner

В сборке 171.4073.35Delegate IDE build/run actions to gradle опция установлена ​​по умолчанию.

+0

Ага, я уже включена обработка аннотаций, как ответы на другие ароматы этого вопроса предполагает его (например, [здесь] (http://stackoverflow.com/questions/33444356/is-there-any- способ создания-intellij-idea-recognising-dagger-2-generated-classes)), но подсказка о возможности делегирования build/run была для меня новой. Спасибо за внимание, чтобы это выяснить. – mous

+0

Вы спасли мой день! Большое спасибо! – thenaoh

0

Алексей ответ хорош, но IntelliJ оленья кожа только проблемы переключения на процессоры аннотаций без очистки, вам нужно также проверить, если процессоры аннотаций включены в

Файл ->Другие параметры ->Настройки по умолчанию ->Компилятор ->Аннотация Процессоры

Если эта опция включена, вы можете также изменить compiler.xml в

[корень проекта] /. Idea/compiler.xml и включить аннотациюПередание true для вашего профиля. (Проверьте изображение ниже скопированы с другого StackOverflow должности)

<component name="CompilerConfiguration"> 
    <annotationProcessing> 
     <profile default="true" name="Default" enabled="true" /> 
    </annotationProcessing> 
    </component> 

Убедитесь, что [Файл -> недействительным кэш и Restart] после

Другие сообщили, что они должны были использовать

применить плагин : 'idea'

в своем файле градиента, позволяющем intellij распознавать созданные кинжалом классы.

enter image description here

0

В дополнение к благоприятной обработки аннотаций, как показано на @ spierce7, моя проблема в том, что я работала Build Project из меню Построение IntelliJ без Задав Gradle -> Runner настройки для делегата IDE строит/запускает действия до градиента. Я понял это после запуска ./gradlew build с терминала и увидел, что создана сборка.

Другим источником путаницы для меня было то, что список каталогов не обновлялся в IntelliJ до тех пор, пока я не щелкнул бы по этой части идеала.

Я удалил apply plugin: 'idea', и он по-прежнему работает так, что это не нужно.

Я не уверен, что Файл -> недействительный Кэш и перезапуск были необходимы, но я попробовал это, как заметил @Emanuel Seibold, прежде чем я заметил, что он начал работать.

0

Я версия 2017.3.3 из IntelliJ IDEA, версия 0.14 из net.ltgt.apt плагина и версию 2.14.1 кинжала и то, что работало для меня было добавить следующее в мой build.gradle файл сказать IntelliJ, где он может найти источники, сгенерированные Dagger:

apply plugin: 'idea' 
idea { 
    module { 
     sourceDirs += file("$buildDir/generated/source/apt/main") 
     testSourceDirs += file("$buildDir/generated/source/apt/test") 
    } 
}