interrompere IntelliJ IDEA per cambiare il livello della lingua java ogni volta che viene ricaricato il pom (o modificare il livello della lingua del progetto predefinito)


145

Usando IntelliJ 12, ho un progetto Java e utilizzo Maven con un pom.xml. Il mio progetto utilizza java8, ma sembra che il livello di lingua del progetto predefinito sia stato impostato su 6 durante l'importazione del progetto.

Posso cambiare il livello della lingua in 8.0 (F4 -> Moduli -> Livello della lingua) comunque ogni volta che modifico il mio pom.xml il livello del progetto torna a "usa il livello della lingua del progetto", e devo modificare di nuovo queste impostazioni e ancora.

C'è qualcosa che devo aggiungere a pom.xml per impostare il livello di lingua predefinito su 8.0?


2
Il tuo pom specifica l'origine e il livello target nella configurazione del plugin del compilatore?
Mark Rotteveel,

sì, sorgente e target impostati su 1.8. Tuttavia non è stato specificato durante l'importazione del progetto
Quentin,

@Quentin In una situazione del genere potrebbe essere il modo più semplice per riadattare il progetto in una nuova posizione e lasciare che IntelliJ lo importi di nuovo.
Thorbjørn Ravn Andersen,

Risposte:


174

Secondo il commento di Mark, ecco come farlo:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

10
il plugin è presente nel target pom, wuth 1.8, ma non cambia nulla :(
Quentin

2
Hai abilitato l'importazione automatica di Maven Pom? Hai controllato i genitori (e nonni), c'è qualche impostazione 1.6 che potrebbe essere in conflitto?
vikingsteve,

1
In effetti il ​​progetto genitore è definito con spring-boot-starter-parent-parent-1.1.9.RELEASE.pom.xml e in pluginManagement il plugin-compilatore-maven è impostato su 1.6 ... Ho provato a sovrascrivere queste impostazioni senza successo. Sembra che Spring Boot 1.2.RC non includa più maven-compilatore-plugin, ci proverò. - l'importazione automatica è abilitata.
Quentin,

Fantastico, potrebbe essere questo il motivo. Se si specifica la stessa versione del plugin del compilatore maven, potrebbe essere possibile sovrascrivere le impostazioni di origine / destinazione. Forse provalo nel tuo progetto radice pom.xml.
vikingsteve,

2
Nel mio caso questo non ha funzionato. Ho dovuto rimuovere l'impostazione menzionata in questa risposta e invece aggiungere quanto segue:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
omonimo

99

Una versione più breve della risposta di vikingsteve è:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

6
Un fastidio in meno!
Artur Cichosz,

4
Questa non era solo una versione breve, ma necessaria nel mio caso. La risposta di vikingsteve non ha funzionato per me. Quindi ho rimosso quell'impostazione e ho usato questo.
omonimo

23

Penso che questo abbia a che fare con un conflitto concettuale tra il plugin del compilatore Maven e l'idea IntelliJ. Apparentemente le versioni più recenti del plugin del compilatore hanno un livello predefinito di 1.5 (vedi http://maven.apache.org/plugins/maven-compiler-plugin/ ). Pertanto, se il plug-in del compilatore viene utilizzato affatto in un progetto e il livello del compilatore non è impostato in modo esplicito in pom.xml, ogni volta che la POM viene rielaborata il livello tornerà al valore predefinito.

Quindi c'è un conflitto concettuale che viene ignorato da Intellij IDEA. L'IDE consente comunque di impostare le impostazioni del progetto e del modulo, ma non fornisce alcun avviso o feedback sul fatto che questa impostazione sia controllata da pom.xml. Le soluzioni sarebbero o consentire esplicitamente di sovrascrivere l'impostazione del plug-in del compilatore POM (forse non saggia perché cosa succede quando si utilizza Maven dalla riga di comando) o disattivare i controlli nell'IDE quando questa impostazione dalla POM è attiva.

La soluzione attualmente è quella di impostare il livello di compilatore desiderato nel plug-in del compilatore in pom, la reimportazione, piuttosto che provare a impostarlo nelle impostazioni del modulo.


1
Concordato. La mancanza di feedback sul fatto che le impostazioni in IDEA verranno semplicemente ignorate e reimportate dal POM è molto confusa, specialmente quando si utilizza un POM principale.
Gillfish

9

Sto aggiornando un progetto da JDK 8 a JDK 10+. Ho avuto le proprietà del compilatore specificate correttamente come segue:

<properties>
  <maven.compiler.source>10</maven.compiler.source>
  <maven.compiler.target>10</maven.compiler.target>
</properties>

Tuttavia, il progetto Idea continuerà a reimpostare il livello della lingua su 8.

Alla fine ho capito che il processo di importazione Maven di Idea stava usando JDK 8 per importare il progetto che limitava il livello della lingua a <= 8.

Per risolvere ho aggiornato la proprietà 'JDK per importatore' in Impostazioni -> Build, Execution, Deployment -> Build Tools -> Maven -> Importing to use JDK 11.

inserisci qui la descrizione dell'immagine


Risolto il mio problema Sembra che IntelliJ abbia aggiornato il proprio JRE interno con le versioni successive (da qualche parte intorno al 2019.2). Abbastanza difficile da rintracciare ...
Hasan Aslam,

8

Esistono due modi per farlo, aggiungere uno di essi nel file pom.xml:

Primo: aggiungi proprietà

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

secondo - Aggiungi plugin

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

Fatemi sapere se aiuta.


Ho fatto entrambe queste cose e il compilatore viene ancora reimpostato su 1,5 ogni volta che provo a eseguire mvn compile da IntelliJ. Tuttavia, funziona benissimo quando eseguito dalla riga di comando all'esterno di IntelliJ.
user26270

1
in IntelliJ, ricordati di reimportare le impostazioni di Maven dopo la modifica. La soluzione ha funzionato per me.
Pierluigi Vernetto,

4

Nessuna delle soluzioni ha aiutato nel mio caso. Non avevo bisogno di specificare alcuna versione Java nel mio pom.xml.

Avevo bisogno di aprire il <project-name>.imlfile e modificare la versione JDK lì.

Originale:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

aggiornato:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Questo non ha per niente senso. Non ho mai specificato una versione JDK per Java 1.5.


Questo, da solo, ha risolto il problema per me in IntelliJ 2019.3, senza richiedere che io cambi qualcosa nel mio pom o altrove. Allo stesso modo non ho mai specificato JDK 1.5 da nessuna parte.
Michael Christoff,

Esempio: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León

1

Ho lottato molto con questo problema, a causa della costruzione di microservizi con Dropwizard. Alla fine ho scoperto che avevo le mie proprietà di compilazione nel file pom errato (il servizio principale pom.xml).

Quindi, anche se gli altri pacchetti sono più simili alle librerie , non sono stato in grado di utilizzare la sintassi Java 8.

Quando ho rifattorizzato il plug-in di build nel "globale" .pom.xml file ", tutti i contenitori figlio sono stati in grado di utilizzare la nuova sintassi.

Può aiutare qualcuno che ha problemi con progetti multi-container


0

Per me la soluzione di aggiornamento di POM (plugin più proprietà) alla versione del compilatore Java richiesta (1_7 nel mio caso) ha funzionato. Tuttavia, poiché il file .iml per ciascun progetto è stato generato con pom originale (con la versione predefinita del compilatore di 1_5, come spiegato da qualcuno sopra) ha una versione JDK di 1_5, questo sostituisce comunque la versione di pom.

Ho eliminato manualmente la cartella .idea e importato il modulo in IntelliJ con una reimportazione dal pom aggiornato. Quando ho reimportato il modulo da POM aggiornato, ho potuto vedere che i file iml avevano la versione JDK aggiornata (1_7 nel mio caso).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.