web-dev-qa-db-fra.com

Est-il possible de faire IntelliJ IDEA reconnaître les classes générées par Dagger 2 dans un projet Java?

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)?

16
Pelocho

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'
}
16
Pelocho

Plus simple j'ai trouvé:

  1. 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'
    }
    
  2. Activez Annotation Processing pour IntelliJ: Allez à Settings et recherchez Annotation Processors, cochez Activer le traitement des annotations comme ci-dessous

 enter image description here

11
Hani

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 .

5
db80

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")
    }
}
3
Adil Hussain

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:

https://stackoverflow.com/a/22769015/5761849

2
Luka

C’est ce que j’avais à faire pour que Idea fonctionne avec Dagger2 et gradle.

  1. Activez le traitement des annotations comme indiqué dans les réponses ci-dessus.
  2. 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'
}
0
nazmul idris