Le projet IntelliJ IDEA Gradle ne reconnaît pas / ne localise pas les sources générées par Antlr

J’utilise Antlr dans un simple projet Kotlin / Gradle et, bien que ma version de Gradle génère des sources Antlr, elles ne peuvent pas être imscopes dans le projet.

Comme vous pouvez le voir (à gauche), les classes (Lexer / Parser, etc.) sont en cours de génération. J’ai également configuré ce generated-src/antlr/main tant que racine source . La plupart des questions que je vois énumèrent ceci comme solution, mais je l’ai déjà fait

Le problème persiste après plusieurs reconstructions (à la fois dans IDEA et sur la CLI) et après tous les problèmes habituels liés à “Invalidate Cache and Restart”.

En outre, le problème d’importation est répertorié dans la version de Gradle sur l’interface de ligne de commande; il ne semble donc pas isolé d’IDEA.

Qu’est-ce que j’oublie ici?

entrez la description de l'image ici

Voici le fichier build.gradle produit par IDEA lors de la création initiale du projet et utilisé par IDEA pour la synchronisation de projet / espace de travail.

 plugins { id 'org.jetbrains.kotlin.jvm' version '1.2.50' } group 'com.craigotis' version '1.0-SNAPSHOT' repositories { mavenCentral() } apply plugin: 'antlr' dependencies { antlr "org.antlr:antlr4:4.5" comstack "org.jetbrains.kotlin:kotlin-stdlib-jdk8" testComstack group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.2.0' } comstackKotlin { kotlinOptions.jvmTarget = "1.8" } comstackTestKotlin { kotlinOptions.jvmTarget = "1.8" } 

Ne devrait-il pas localiser les classes compilées et non les sources? Voyez-vous les classes générées par antlr dans le répertoire cible?

Essayez ceci: commencez par construire le projet sans référencer ou utiliser les classes générées par ANTLR, et seulement après que la construction soit réussie, puis ajoutez le code qui les référence.

(En d’autres termes, ce que je pense que cela se produit, c’est que vos sources ANTLR sont compilées après le code qui les référence. Elles n’ont jamais l’occasion de comstackr car la construction échoue auparavant.)

De plus, si c’est vraiment le cas, vous pouvez le résoudre également en le scindant en deux artefacts et en vous assurant que celui d’ANTLR est construit avant celui avec le code qui l’utilise.

Essayez d’append ceci à votre build.gradle :

 sourceSets { main.java.srcDirs += "${project.buildDir}/generated-src/antlr/main" } generateGrammarSource { arguments += ["-visitor", "-package", "com.craigotis.sprint.core.antlr"] outputDirectory = file("${project.buildDir}/generated-src/antlr/main/com/craigotis/sprint/core/antlr") } comstackKotlin.dependsOn generateGrammarSource 

Essayez d’append des sources générées dans le module des idées comme ce billet de Daniel Dekany ici :

 apply plugin: "idea" ... sourceSets.main.java.srcDir new File(buildDir, 'generated/javacc') idea { module { // Marks the already(!) added srcDir as "generated" generatedSourceDirs += file('build/generated/javacc') } }