web-dev-qa-db-fra.com

Impossible de résoudre le symbole avec AutoValue et IntelliJ

J'ai essayé de trouver les paramètres corrects pour le traitement des annotations d'IntelliJ afin qu'il puisse coexister avec le processus de construction de Gradle.

Chaque fois que je construis à partir d'IntelliJ, je ne peux pas le faire reconnaître les sources générées à partir de gradle-apt-plugin .

Mes exigences pour mon projet sont:

  • La construction entre IntelliJ et Gradle doit être homogène et ne pas interférer avec le processus de l'autre
  • J'ai besoin d'utiliser IntelliJ's Créer un module séparé par ensemble de sources option
  • J'ai besoin d'utiliser la structure de dossiers d'IntelliJ
  • IntelliJ doit être capable de reconnaître et de compléter automatiquement les classes AutoValue

Voici les étapes à suivre pour un MCVE afin de reproduire le problème avec IntelliJ 2017.2.4 et Gradle 3.5:

  • Créer un nouveau projet Gradle à partir d'IntelliJ
  • Vérifiez le Créez un module séparé par ensemble de sources option
  • Ouvrir build.gradle fichier:
  • Ajoutez le bloc plugins suivant:

plugins {
    id 'Java'
    id 'net.ltgt.apt' version '0.12'
}
  • Ajouter le bloc dependencies suivant

dependencies {
    compileOnly 'com.google.auto.value:auto-value:1.5'
    apt 'com.google.auto.value:auto-value:1.5'
}
  • Allez dans Paramètres → Construire, Exécuter, Déployer → Processeurs d'annotation
  • Vérifier le Activer le traitement des annotations
  • Créer une classe:

@AutoValue
public abstract class GeneratedSourcesTest {

    static GeneratedSourcesTest create(String field) {
        return new AutoValue_GeneratedSourcesTest(field);
    }

    public abstract String field();
}
  • Sur IntelliJ, exécutez Construire → Construire un projet
  • Ouvrez la classe GeneratedSourcesTest, sur la méthode de la fabrique statique, tout se compile bien mais j'obtiens l'erreur:

cannot resolve symbol ‘AutoValue_GeneratedSourcesTest’

Comment puis-je rendre la classe AutoValue_GeneratedSourcesTest accessible depuis IntelliJ?

7
Jaiye

Après avoir importé votre projet Gradle sous IDEA, procédez comme suit:

  1. Définissez la configuration du traitement des annotations comme suit:  enter image description here

  2. Menu Exécuter: Build - Build Project

  3. Cliquez avec le bouton droit de la souris sur chaque nouveau dossier généréet sélectionnez: Marquer le répertoire comme - Source des sources généréesafin qu'il soit marqué comme suit:  enter image description here

    1. Ajouter /generated au projet .gitignorefile) du projet

C’est une configuration minimale viable qui fournira un support complet de IDE pour les classes générées. L’inconvénient est que chaque fois que le projet Gradle est réimporté, les dossiers générésdoivent être marqués comme Generated Sources Rootagain. Cela pourrait peut-être être amélioré en ajoutant ces chemins en tant que jeux sources sous build.gradle.

Il arrive parfois que les modules IDEA perdent leur chemin de sortie du compilateurparamètres en raison de ce qui précède. Il suffit de le rétablir dans leurs dossiers par défaut.

6
topr

Les réponses sont (devraient être) dans le README pour le gradle-apt-plugin: https://github.com/tbroyer/gradle-apt-plugin

À savoir, appliquez également le plugin net.ltgt.apt-idea.

Au fait, je recommande de déléguer des actions de construction/exécution à Gradle dans IntelliJ. Bien sûr, c'est un peu plus lent, mais ne nécessite aucune configuration dans le IDE et fonctionne de manière fiable. Cela dit, cela devrait également marcher si vous ne le faites pas.

2
Thomas Broyer

Ayez juste votre build.gradle avec ceux-ci et ça marche très bien, pas besoin de toucher à intellij, à la source, etc.

    plugins {
    id 'Java'
    id "net.ltgt.apt" version "0.20"

}

apply plugin: 'idea'
apply plugin: 'net.ltgt.apt-idea'
group 'abc'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile             "com.google.auto.value:auto-value-annotations:1.6.2"
    annotationProcessor "com.google.auto.value:auto-value:1.6.2"
}
0
Amit Kumar