Существует ли какой-либо способ сделать IntelliJ IDEA распознающим Dagger 2 сгенерированные классы в проекте Java?
Контекст
Я начал личный проект на java с Gradle в качестве системы сборки, и я хочу использовать Dagger 2 в качестве DI. Основная причина этого заключается в том, чтобы привыкнуть к этой библиотеке и иметь возможность легко использовать ее в более крупных проектах.
Что я пробовал
Мне удалось сделать пример Google работает на IntelliJ IDEA
Задача
IntelliJ IDEA продолжает говорить мне, что он не может разрешить сгенерированный класс (in этот случай DaggerCoffeeApp_Coffee). Это немного раздражает не знать, если написанный код является правильным (особенно когда вы учитесь использовать Dagger 2).
Все классы java совпадают с образцом Google. Вот мой файл build.gradle:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.0.1'
compile 'com.google.dagger:dagger-compiler:2.0.1'
}
Вопрос
Есть ли способ заставить IntelliJ IDEA распознать DaggerCoffeeApp_Coffee как сгенерированный класс (и таким образом сделать возможным переход к его реализации с помощью `ctrl + левый клик)?
6 ответов:
Наконец-то я сделал это!
Мне пришлось добавить плагин
aptиidea, поэтому сейчас мой файлbuild.gradleвыглядит так:buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "net.ltgt.gradle:gradle-apt-plugin:0.4" } } apply plugin: "net.ltgt.apt" apply plugin: 'java' apply plugin: 'idea' repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile 'com.google.dagger:dagger:2.0.1' apt 'com.google.dagger:dagger-compiler:2.0.1' }
Самый простой способ, который я нашел:
Добавьте
ideaплагин и добавьте зависимость Dagger2, как показано ниже:plugins { id "net.ltgt.apt" version "0.10" } apply plugin: 'java' apply plugin: 'idea' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile 'com.google.dagger:dagger:2.11' apt 'com.google.dagger:dagger-compiler:2.11' }Включите
Annotation Processingдля IntelliJ: перейдите кSettingsи найдитеAnnotation Processors, Установите флажок Включить обработку аннотаций, как показано ниже:
Вы должны вручную включить Обработка аннотаций в Интеллидж.
Из: Настройки -- > сборка, выполнение, развертывание -- > компилятор --> процессоры аннотаций--> включить обработку аннотаций и еще Получение процессоров из project classpath
Затем перестроите проект, и вы найдете сгенерированные классы в проекте.
Обратите внимание, что я использовал это решение в (java) android проект.
Я использую версию
2017.3.3IntelliJ IDEA, версию0.14плагинаnet.ltgt.aptи версию2.14.1Dagger, а также применяю плагинideaв файлеbuild.gradle(как и в ответе Пелохо ), я также должен был сказать IntelliJ, где он может найти источники, генерируемые Dagger, следующим образом:apply plugin: 'idea' idea { module { sourceDirs += file("$buildDir/generated/source/apt/main") testSourceDirs += file("$buildDir/generated/source/apt/test") } }
Вот решение, которое сработало для меня:
Файл - > структура проекта - > (выберите свой проект в списке модулей) - > откройте вкладку "зависимости"
Затем нажмите на зеленый знак"+", выберите "JARs or directory" и выберите папку "build/classes/main".
Другим решением было бы связать папку с файлами класса сборки, используя блок "зависимости" внутри сборки.грэдл:
Это то, что мне пришлось сделать, чтобы получить идеи для работы с Dagger2 и Gradle.
- включите обработку аннотаций, как показано в ответах выше.
Добавьте следующее в файл
build.gradle, Чтобы Idea увидела сгенерированные классы в качестве источников.sourceDirs += file("$projectDir/out/production/classes/generated/")Вот полный список моих
build.gradleplugins { id 'java' id 'idea' id "net.ltgt.apt" version "0.10" } idea { module { sourceDirs += file("$projectDir/out/production/classes/generated/") } } repositories { mavenCentral() } dependencies { compile 'com.google.dagger:dagger:2.16' apt 'com.google.dagger:dagger-compiler:2.16' } sourceCompatibility = 1.8Кроме того, мне пришлось добавить следующую задачу gradle (к моей сборке.gradle file), чтобы очистить мой каталог
out. Когда я переехал некоторые файлы и Dagger2 восстановил исходные файлы, каталогoutне был очищен :(. Я также включил эту задачу в конфигурацию запуска, чтобы она запускалась до того, как я перестрою свой проект.task clearOutFolder(type: Delete) { delete 'out' }
