Есть ли способ сделать IntelliJ IDEA распознаванием порожденных классов Dagger 2 в проекте Java?
Контекст
Я начал собственный проект в java с Gradle
в качестве системы сборки, и я хочу использовать Dagger 2 как DI. Основная причина заключается в том, чтобы привыкнуть к этой библиотеке и иметь возможность легко использовать ее в больших проектах.
Что я пробовал
Мне удалось сделать образец Google для IntelliJ IDEA
Проблема
IntelliJ IDEA продолжает говорить мне, что он не может разрешить сгенерированный класс (в данном случае DaggerCoffeeApp_Coffee
). Это немного раздражает, чтобы не знать, правильно ли написанный код (особенно когда вы учитесь использовать Кинжал 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 + left click)?
Ответы
Ответ 1
Наконец, я сделал это!
Мне пришлось добавить плагин 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'
}
Ответ 2
Самый простой способ:
-
Добавьте плагин 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
, установите флажок Включить обработку аннотации, как показано ниже:
![введите описание изображения здесь]()
Ответ 3
Вы должны вручную включить обработку аннотаций в IntelliJ.
От: Настройки → Построение, Выполнение, Развертывание → Компилятор → Процессоры аннотаций → Включить обработку аннотаций и Получить процессоры из пути к классам проекта
затем пересоберите проект, и вы найдете сгенерированные классы в проекте.
Обратите внимание, что я использовал это решение в (Java) проекте Android.
Ответ 4
Я использую версию 2017.3.3
для IntelliJ IDEA, версию 0.14
плагина net.ltgt.apt
и версию 2.14.1
кинжала, а также использование плагина idea
в файле build.gradle
(as в Pelocho answer) Я обнаружил, что мне также пришлось сообщить IntelliJ, где он может найти источники, созданные кинжалом, следующим образом:
apply plugin: 'idea'
idea {
module {
sourceDirs += file("$buildDir/generated/source/apt/main")
testSourceDirs += file("$buildDir/generated/source/apt/test")
}
}
Ответ 5
Вот решение, которое сработало для меня:
Файл → Структура проекта → (выберите проект под списком модулей) → Откройте вкладку "Зависимости"
Затем щелкните зеленый знак "+", выберите "JARs или каталог" и выберите папку "build/classes/main".
Другим решением было бы связать папку с файлами класса сборки, используя блок "dependencies" внутри build.gradle:
fooobar.com/questions/331103/...
Ответ 6
Это то, что я должен был сделать, чтобы заставить Idea работать с Dagger2 и Gradle.
- Включите обработку аннотаций, как показано в ответах выше.
-
Добавьте следующее в файл build.gradle
чтобы Idea увидела сгенерированные классы в качестве источников.
sourceDirs += file("$projectDir/out/production/classes/generated/")
Здесь полный список моих build.gradle
plugins {
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 (в мой файл build.gradle), чтобы очистить мой каталог out
. Когда я переместил некоторые файлы и Dagger2 сгенерировал исходные файлы, каталог out
не был очищен :(. Я также включил эту задачу в свою конфигурацию запуска, чтобы она запускалась до того, как я перестроил свой проект.
task clearOutFolder(type: Delete) {
delete 'out'
}
Ответ 7
Используя IntelliJ IDEA 2019.1 и Gradle 5.4.1, этого кажется достаточно:
plugins {
id 'java'
}
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation 'com.google.dagger:dagger:2.23.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
}
Я не знаю минимальные версии, для которых это решение работает, хотя.
Ответ 8
У меня была похожая проблема, я долго не мог найти причину.
Просто запустил и результат меня удивил.
Intellij Idea 2018.3.6 -
build.gradle
:
plugins {
id "java"
}
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'
}