Contexte
J'ai démarré un projet personnel en Java avec Gradle
en tant que système de construction et je souhaite utiliser Dagger 2 en tant que DI. La raison principale est de s’habituer à cette bibliothèque et de pouvoir l’utiliser facilement dans des projets plus importants.
Qu'est-ce que j'ai essayé
J'ai réussi à créer le exemple Google fonctionne sous IntelliJ IDEA
Problème
IntelliJ IDEA n'arrête pas de me dire qu'il ne peut pas résoudre la classe générée (dans ce cas, DaggerCoffeeApp_Coffee
). C'est un peu gênant de ne pas savoir si le code écrit est correct (spécialement lorsque vous apprenez à utiliser Dagger 2).
Toutes les classes Java sont identiques à celles de exemple Google . Voici mon fichier 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'
}
Question
Existe-t-il un moyen de faire en sorte qu'IntelliJ IDEA reconnaisse DaggerCoffeeApp_Coffee
en tant que classe générée (et rende ainsi possible son implémentation par ctrl + clic gauche)?
Enfin je l'ai fait!
Je devais ajouter les plug-ins apt
et idea
afin que mon fichier build.gradle
ressemble maintenant à ceci:
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'
}
Plus simple j'ai trouvé:
Ajoutez le plugin idea
et ajoutez la dépendance Dagger2 comme ci-dessous:
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'
}
Activez Annotation Processing
pour IntelliJ: Allez à Settings
et recherchez Annotation Processors
, cochez Activer le traitement des annotations comme ci-dessous
vous devez activer manuellement le traitement des annotationsdans IntelliJ.
Depuis: Paramètres -> Construire, Exécution, Déploiement -> Compilateur -> Processeurs d'annotation -> Activer le traitement des annotations et Obtenir les processeurs du chemin de classe du projet
puis reconstruisez le projet et vous trouverez les classes générées dans le projet.
Veuillez noter que j'ai utilisé cette solution dans un projet (Java) Android .
J'utilise la version 2017.3.3
d'IntelliJ IDEA, la version 0.14
du plugin net.ltgt.apt
et la version 2.14.1
de Dagger, ainsi que l'application du plugin idea
dans le fichier build.gradle
(comme dans Pelocho's answer ). Indique à IntelliJ où trouver les sources générées par Dagger, comme suit:
apply plugin: 'idea'
idea {
module {
sourceDirs += file("$buildDir/generated/source/apt/main")
testSourceDirs += file("$buildDir/generated/source/apt/test")
}
}
Voici la solution qui a fonctionné pour moi:
Fichier -> Structure du projet -> (sélectionnez votre projet dans la liste des modules) -> Ouvrir l'onglet "Dépendances"
Ensuite, cliquez sur le signe «+» vert, sélectionnez «JAR ou répertoire», puis sélectionnez le dossier «build/classes/main».
Une autre solution consisterait à lier un dossier avec des fichiers de classe de construction à l’aide du bloc 'dependencies' dans le fichier build.gradle:
C’est ce que j’avais à faire pour que Idea fonctionne avec Dagger2 et gradle.
Ajoutez ce qui suit au fichier build.gradle
afin que Idea puisse voir les classes générées en tant que sources.
sourceDirs += file("$projectDir/out/production/classes/generated/")
Voici la liste complète de mon 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
En outre, je devais ajouter la tâche de gradle suivante (à mon fichier build.gradle) pour vider mon répertoire out
. Lorsque j'ai déplacé des fichiers et que Dagger2 a régénéré les fichiers source, le répertoire out
n'était pas effacé :(. J'ai également inclus cette tâche dans ma configuration d'exécution afin qu'elle soit déclenchée avant de reconstruire mon projet.
task clearOutFolder(type: Delete) {
delete 'out'
}