Configuration d'IntelliJ pour utiliser le compilateur Groovy Au lieu du compilateur Java


Dans mon projet maven, je mélange actuellement mon code Java avec du code Groovy. J'utilise principalement Groovy pour construire les haricots à ce stade. Une partie de mon code Java utilise directement les beans Groovy.

J'ai configuré le plugin du compilateur Maven comme ceci: -

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <compilerId>groovy-eclipse-compiler</compilerId>
        <source>${jdk.version}</source>
        <target>${jdk.version}</target>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-eclipse-compiler</artifactId>
            <version>2.8.0-01</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-eclipse-batch</artifactId>
            <version>2.1.5-03</version>
        </dependency>
    </dependencies>
</plugin>

Lorsque j'exécute mes testcases en utilisant mvn test, cela fonctionne très bien.

Cependant, lorsque j'exécute les cas de test directement à partir d'IntelliJ en cliquant avec le bouton droit sur le fichier de test et en l'exécutant, j'obtiens des erreurs "impossible de trouver le symbole" sur le Haricots groovy. Lorsque je lis le journal des erreurs, IntelliJ utilise le compilateur Java pour compiler mon projet avant d'exécuter le test... ainsi, le test échoue.

Je n'arrive pas à comprendre comment demander à IntelliJ d'utiliser toujours le compilateur Groovy au lieu du compilateur Java.

Que dois-je changer sous SDK pour que le compilateur Groovy soit utilisé? J'ai essayé d'ajouter des fichiers JAR liés à Groovy, mais j'ai eu d'autres erreurs.

entrez la description de l'image ici

MISE À JOUR 1: Par @ Seagull suggestion

Je ajout de POTS groovy sous "Bibliothèques globales": -

entrez la description de l'image ici

Lorsque j'ai exécuté le fichier de test directement à partir d'IntelliJ, je reçois des avertissements Groovy et j'obtiens toujours la même erreur: -

entrez la description de l'image ici

Merci.

Author: limc, 2013-12-10

2 answers

J'ai eu ce problème sur la dernière version de l'Ide, ideaIC-15.0.3-custom-jdk-livré.dmg sur MAC 10.10.5, JDK 1.8.0_60.

Y compris toutes les étapes pour la postérité...

  1. Depuis le terminal, j'ai installé la dernière version de groovy, en utilisant sdkman: sdk install groovy 2.4.5
  2. Dans Intellij, faites un clic droit sur le projet en haut > sélectionnez "Ajouter un support de framework...">Add groovy 2.4.5 (s'il n'a pas déjà été ajouté).
  3. Dans Intellij, "Préférences" > "Construire, l'Exécution, le Déploiement" > "Compilateur" > "Ressources de motifs:" > modifier l'ordre de !?*.java;!?*.groovy à !?*.groovy;!?*.java
  4. Recompiler le projet (Commande+Maj+F9), il devrait maintenant compiler avec succès.
 5
Author: Nick Grealy, 2016-02-07 03:50:50

Voici la réponse de l'équipe de support IntelliJ le 2 janvier 2014 concernant ce problème: -

IDEA utilise groovyc pour générer des stubs Java pour que les classes Groovy permettent pour une interopérabilité transparente. Malheureusement le code de génération de stub ne le fait pas lancer des transformations AST (par exemple Immuable) et donc les méthodes généré par ces transformations ne le transforme pas en stubs Java, donc compilateur Java ne les voit pas.

Malheureusement, je ne vois aucune solution de contournement qui ne nécessite pas la modification de votre projet. L'un serait de placer les fichiers Groovy dans un module séparé. Une autre serait de changer les lieux d'appel en Groovy. Le troisième serait de remplacer @Immuable par @Canonical et de générer le constructeur pour qu'il soit réellement dans le code (et les talons seront le contiennent).

Vous pouvez également voter/regarder http://youtrack.jetbrains.com/issue/IDEA-52379 pour prendre en charge le compilateur Eclipse Groovy.

J'ai fini par supprimer à la fois @Immutable et {[1] } et créer mes propres constructeurs, pour 2 raisons: -

  • Cela me permet d'exécuter mon cas de test directement à partir d'IntelliJ.
  • Il nettoie le rapport de couverture de code JaCoCo de manière significative causé par les constructeurs inutilisés fournis gratuitement par @Immutable et @Canonical.
 3
Author: limc, 2014-01-09 17:29:52