Configurazione di IntelliJ per utilizzare il compilatore Groovy anziché il compilatore Java


Nel mio progetto maven, attualmente sto mescolando il mio codice Java con un codice Groovy. Sto usando Groovy principalmente per costruire i fagioli a questo punto. Parte del mio codice Java utilizza direttamente i fagioli Groovy.

Ho configurato il plugin del compilatore Maven in questo modo: -

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

Quando eseguo i miei testcase usando mvn test, funziona bene.

Tuttavia, quando eseguo i testcase direttamente da IntelliJ facendo clic con il pulsante destro del mouse sul file di test ed eseguirlo, ricevo errori "impossibile trovare il simbolo" sul Fagioli piccanti. Quando leggo il registro degli errori, IntelliJ utilizza il compilatore Java per compilare il mio progetto prima di eseguire il test... quindi, i test falliscono.

Non riesco a capire come istruire IntelliJ a usare sempre il compilatore Groovy invece del compilatore Java.

Cosa devo cambiare in SDK in modo che venga utilizzato il compilatore Groovy? Ho provato ad aggiungere file JAR correlati a Groovy, ma ho avuto altri errori.

inserisci qui la descrizione dell'immagine

AGGIORNAMENTO 1: Per suggerimento @ Seagull

I aggiunto vasi groovy sotto "Librerie globali": -

inserisci qui la descrizione dell'immagine

Quando ho eseguito il file di test direttamente da IntelliJ, ricevo alcuni avvisi Groovy e ricevo ancora lo stesso errore: -

inserisci qui la descrizione dell'immagine

Grazie.

Author: limc, 2013-12-10

2 answers

Ho avuto questo problema sull'ultima versione di Intellij ideaIC-15.0.3-custom-jdk-in bundle.dmg su MAC 10.10.5, JDK 1.8.0_60.

Compresi tutti i passaggi per i posteri...

  1. Dal terminale, ho installato l'ultima versione di groovy, usando sdkman : sdk install groovy 2.4.5
  2. In Intellij, fare clic con il pulsante destro del mouse su progetto superiore > selezionare "Aggiungi supporto framework...">Aggiungi groovy 2.4.5 (se non è già stato aggiunto).
  3. In Intellij, "Preferenze" > "Build, Execution, Deployment" > "Compiler" > "Resource patterns:" > modifica l'ordine da !?*.java;!?*.groovy a !?*.groovy;!?*.java
  4. Ricompila il comando project (+Maiusc+F9), ora dovrebbe essere compilato correttamente.
 5
Author: Nick Grealy, 2016-02-07 03:50:50

Questa è la risposta del team di supporto IntelliJ il 2 gennaio 2014 riguardo a questo problema: -

IDEA utilizza groovyc per generare stub Java per le classi Groovy per consentire per interoperabilità senza soluzione di continuità. Sfortunatamente il codice di generazione dello stub non lo fa immutabile) e così i metodi generato da tali trasformazioni non lo rendono in stub Java, quindi il compilatore Java non li vede.

Sfortunatamente non vedo soluzioni alternative che non richiedono modifica del tuo progetto. Uno sarebbe quello di posizionare i file Groovy in un modulo separato. Un altro sarebbe quello di cambiare i posti di chiamata in Groovy. Il terzo sarebbe sostituire @ Immutable con @ Canonical e generare il costruttore in modo che sia effettivamente nel codice (e gli stub lo faranno contenerlo).

Puoi anche votare / guardare http://youtrack.jetbrains.com/issue/IDEA-52379 per supportare Eclipse compilatore Groovy.

Ho finito per rimuovere sia @Immutable che @Canonical e creare i miei costruttori, per 2 motivi: -

  • Mi permette di eseguire il mio test case direttamente da IntelliJ.
  • Pulisce il rapporto di copertura del codice JaCoCo in modo significativo causato dai costruttori inutilizzati forniti gratuitamente da @Immutable e @Canonical.
 3
Author: limc, 2014-01-09 17:29:52