Stoppen Sie IntelliJ IDEA, um die Java-Sprachstufe jedes Mal zu wechseln, wenn der POM neu geladen wird (oder ändern Sie die Standard-Sprachsprache des Projekts).

145

Mit IntelliJ 12 habe ich ein Java-Projekt und ich benutze Maven mit einer pom.xml. Mein Projekt verwendet Java8, aber anscheinend wurde beim Importieren des Projekts die Standard-Sprachsprache für das Projekt auf 6 festgelegt.

Ich kann die Sprachstufe auf 8.0 ändern (F4 -> Module -> Sprachstufe), aber jedes Mal, wenn ich meine pom.xml bearbeite, wird die Projektebene wieder auf "Projektsprachenstufe verwenden" umgeschaltet, und ich muss diese Einstellungen erneut bearbeiten und nochmal.

Muss ich der Datei pom.xml etwas hinzufügen, um die Standardsprache auf 8.0 festzulegen?

QUentin
quelle
2
Gibt Ihr POM die Quell- und Zielebene in der Compiler-Plugin-Konfiguration an?
Mark Rotteveel
Ja, Quelle und Ziel auf 1,8 eingestellt. Es wurde jedoch nicht während des Projektimports angegeben
Quentin
@Quentin In einer solchen Situation ist es möglicherweise am einfachsten, das Projekt an einem neuen Speicherort neu zu klonen und IntelliJ das stattdessen neu importieren zu lassen.
Thorbjørn Ravn Andersen

Antworten:

174

Nach Marks Kommentar geht es folgendermaßen vor:

<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>
vikingsteve
quelle
10
Das Plugin ist im POM mit dem Ziel 1.8 vorhanden, ändert aber nichts :(
Quentin
2
Haben Sie den automatischen Import Ihres Maven Pom aktiviert? Haben Sie die Poms der Eltern (und Großeltern) überprüft? Gibt es dort 1.6 Einstellungen, die möglicherweise widersprüchlich sind?
Wikingersteve
1
In der Tat ist das übergeordnete Projekt mit spring-boot-Starter-parent-1.1.9.RELEASE.pom.xml definiert und in pluginManagement ist das maven-compiler-plugin auf 1.6 gesetzt ... Ich habe versucht, diese Einstellungen ohne Erfolg zu überschreiben. Sieht so aus, als ob Spring Boot 1.2.RC kein Maven-Compiler-Plugin mehr enthält. Ich werde es versuchen. - Der automatische Import ist aktiviert.
Quentin
Großartig, das könnte der Grund sein. Wenn Sie dieselbe Version des Maven-Compiler-Plugins angeben, können die Quell- / Zieleinstellungen möglicherweise überschrieben werden. Vielleicht versuchen Sie das in Ihrem Projekt root pom.xml.
Wikingersteve
2
In meinem Fall hat das nicht funktioniert. Ich musste die in dieser Antwort erwähnte Einstellung entfernen und stattdessen Folgendes hinzufügen:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
Genonym
99

Eine kürzere Version der Antwort von vikingsteve lautet:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
DieterDP
quelle
6
Ein Ärger weniger!
Artur Cichosz
4
Dies war nicht nur eine Kurzversion, sondern in meinem Fall eine notwendige. Die Antwort von vikingsteve hat bei mir nicht funktioniert. Also habe ich diese Einstellung entfernt und diese verwendet.
Genonym
23

Ich denke, das hat mit einem konzeptionellen Konflikt zwischen dem Maven-Compiler-Plugin und der IntelliJ-Idee zu tun. Anscheinend haben die neueren Versionen des Compiler-Plugins eine Standardstufe von 1,5 (siehe http://maven.apache.org/plugins/maven-compiler-plugin/ ). Wenn also das Compiler-Plugin überhaupt in einem Projekt verwendet wird und die Compiler-Ebene nicht explizit in der Datei pom.xml festgelegt ist, wird die Ebene bei jeder erneuten Verarbeitung des POM auf die Standardeinstellung zurückgesetzt.

Es gibt also einen konzeptionellen Konflikt, der von Intellij IDEA ignoriert wird. Die IDE ermöglicht weiterhin das Festlegen der Projekt- und Moduleinstellungen, bietet jedoch keine Warnung oder Rückmeldung, dass diese Einstellung von pom.xml gesteuert wird. Die Lösung besteht entweder darin, das explizite Überschreiben der POM-Compiler-Plugin-Einstellung explizit zuzulassen (möglicherweise nicht sinnvoll, da dies dann geschieht, wenn Sie maven in der Befehlszeile verwenden) oder die Steuerelemente in der IDE zu deaktivieren, wenn diese Einstellung im POM wirksam ist.

Die Lösung besteht derzeit darin, die gewünschte Compiler-Ebene im Compiler-Plugin im POM, den Re-Import, festzulegen, anstatt zu versuchen, sie in den Moduleinstellungen festzulegen.

Peter N. Steinmetz
quelle
1
Einverstanden. Das Fehlen einer Rückmeldung, dass die Einstellungen in IDEA einfach ignoriert und aus dem POM erneut importiert werden, ist sehr verwirrend, insbesondere bei Verwendung eines übergeordneten POM.
Gillfish
9

Ich aktualisiere ein Projekt von JDK 8 auf JDK 10+. Ich hatte die Compiler-Eigenschaften wie folgt korrekt angegeben:

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

Das Idea-Projekt würde jedoch das Sprachniveau weiterhin auf 8 zurücksetzen.

Schließlich stellte ich fest, dass der Maven-Importprozess von Idea JDK 8 zum Importieren des Projekts verwendete, wodurch das Sprachniveau auf <= 8 begrenzt wurde.

Um dies zu beheben, habe ich die Eigenschaft 'JDK für Importer' unter Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Build-Tools -> Maven -> Importieren aktualisiert, um JDK 11 zu verwenden.

Geben Sie hier die Bildbeschreibung ein

danw
quelle
Mein Problem wurde behoben. Scheint, als hätte IntelliJ seine interne JRE mit den späteren Versionen aktualisiert (irgendwo um 2019.2). Ziemlich schwer zu finden ...
Hasan Aslam
8

Es gibt zwei Möglichkeiten, dies zu tun: Fügen Sie eine davon in Ihre pom.xml-Datei ein:

Zuerst Eigenschaften hinzufügen

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

2. Add Plugin hinzufügen

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

Lassen Sie mich wissen, ob es hilft.

Anuj Teotia
quelle
Ich habe beides getan und der Compiler wird immer noch auf 1.5 zurückgesetzt, wenn ich versuche, mvn compile in IntelliJ auszuführen. Es funktioniert jedoch einwandfrei, wenn es über die Befehlszeile außerhalb von IntelliJ ausgeführt wird.
user26270
1
Denken Sie in IntelliJ daran, die Maven-Einstellungen nach der Änderung erneut zu importieren. Die Lösung hat bei mir funktioniert.
Pierluigi Vernetto
4

Keine der Lösungen hat in meinem Fall geholfen. Ich musste keine Java-Version in meinem angeben pom.xml.

Ich musste die <project-name>.imlDatei öffnen und dort die JDK-Version ändern.

Original:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Aktualisiert:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Das macht überhaupt keinen Sinn. Ich habe zu keinem Zeitpunkt eine JDK-Version für Java 1.5 angegeben.

kleinfreund
quelle
Dies allein löste das Problem für mich in IntelliJ 2019.3, ohne dass ich irgendetwas an meinem Pom oder irgendwo anders ändern musste. Ich habe JDK 1.5 auch nirgendwo angegeben.
Michael Christoff
Beispiel: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León
1

Ich hatte große Probleme mit diesem Problem, da ich mit Dropwizard Microservices erstellt habe. Schließlich fand ich heraus, dass ich meine Build-Eigenschaften in der falschen POM- Datei hatte (der Hauptdienst pom.xml).

Obwohl die anderen Pakete eher Bibliotheken ähneln , konnte ich die Java 8-Syntax nicht verwenden.

Als ich das Build-Plugin in die "globale" .pom.xmlDatei umgestaltete , konnten alle untergeordneten Container die neue Syntax verwenden.

Kann jemandem helfen, der Probleme mit Multi-Container-Projekten hat

user3677636
quelle
0

Für mich funktionierte die Lösung, das POM (Plugins plus Eigenschaften) auf die erforderliche Java-Compiler-Version (in meinem Fall 1_7) zu aktualisieren. Da die IML-Datei für jedes Projekt mit dem Original-POM (mit der von jemandem oben erläuterten Standard-Compiler-Version 1_5) mit einer JDK-Version 1_5 erstellt wurde, überschreibt dies weiterhin die POM-Version.

Ich habe den .idea-Ordner manuell gelöscht und das Modul mit einem Reimport vom aktualisierten POM in IntelliJ importiert. Als ich das Modul aus dem aktualisierten POM erneut importierte, konnte ich feststellen, dass die IML-Dateien die aktualisierte JDK-Version hatten (in meinem Fall 1_7).

Shirish Sakhare
quelle