IDEE: javac: Quellversion 1.7 erfordert Zielversion 1.7

474

Wenn ich einen JUnit-Test mit IntelliJ IDEA durchführe, bekomme ich

Geben Sie hier die Bildbeschreibung ein

Wie kann ich das korrigieren?

  • Verwenden von SDK 1.7
  • Das Sprachniveau des Moduls beträgt 1,7

Maven Build funktioniert gut. (Deshalb glaube ich, dass dies ein Problem mit der IDEA-Konfiguration ist.)

James Raitsev
quelle

Antworten:

689

Höchstwahrscheinlich haben Sie hier falsche Compileroptionen aus Maven importiert:

Compiler-Optionen

Überprüfen Sie auch die Einstellungen der Projekt- und Modul-Bytecode- Version ( Zielversion ), die im Screenshot dargestellt sind.

Andere Orte, an denen die Quellsprache konfiguriert ist:

  • Projektstruktur | Projekt

Projekt

  • Projektstruktur | Module (überprüfen Sie jedes Modul) | Quellen

Quellen

Die Standard-Sprachstufe von Maven ist 1,5 (5,0). Diese Version wird auf dem obigen Screenshot als Modul-Sprachstufe angezeigt .

Dies kann mithilfe der Konfiguration des Maven-Compiler-Plugins geändert werden pom.xml:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

oder

<project>
  [...]
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  [...]
</project>

IntelliJ IDEA respektieren diese Einstellung nach dem Reimport der Maven - Projekt in der Maven - Projekte Tool - Fenster:

Wiedereinfuhr

CrazyCoder
quelle
2
Richtig. Ist diese Einstellung allen Modulen in einem Projekt gemeinsam oder ist sie spezifisch für ein bestimmtes Modul?
James Raitsev
1
Diese Einstellung gilt pro Projekt und betrifft alle Module.
CrazyCoder
8
Gibt es einen Grund, warum nach dem Beheben und Anwenden, dass es auf einen falschen Wert zurückgesetzt wird (entweder über Maven-Änderungen oder so)?
Patrick
5
@Patrick, Ihre pom.xmlJava-Compiler-Plug-In-Konfiguration gibt möglicherweise eine Java-Version an, die diese Einstellung überschreibt, wenn Sie das nächste Mal Änderungen an der Datei pom.xml vornehmen (wenn der automatische Reimport aktiviert ist) oder das Projekt manuell erneut importieren.
CrazyCoder
1
@CrazyCoder Ich habe meine pom.xml geändert, nachdem ich dies viel früher geändert hatte (ich habe auf andere eingehende Änderungen am pom gewartet), so dass dies nach einer ziemlich vernünftigen Erklärung klingt. Vielen Dank
Patrick
358

IntelliJ 15, 2016 & 2017

Ähnlich wie unten für IntelliJ 13 und 14 beschrieben, jedoch mit einer zusätzlichen Ebene im Bereich Einstellungen / Einstellungen: Einstellungen > Erstellen, Ausführen, Bereitstellen > Compiler > Java-Compiler .

Geben Sie hier die Bildbeschreibung ein

IntelliJ 13 & 14

Überprüfen Sie in IntelliJ 13 und 14 die Einstellungen> Compiler> Java Compiler- Benutzeroberfläche, um sicherzustellen, dass Sie nicht auf eine andere Bytecode-Version in Ihrem Modul abzielen.

Geben Sie hier die Bildbeschreibung ein

Drew Noakes
quelle
3
Ich musste meine Module löschen und sie automatisch auflösen lassen (leer lassen für jdk default)
Akin Okegbile
3
Funktioniert für die neueste Idee 14.1
Tushar
Also, was ist das Problem hier?
AlikElzin-Kilaka
@ AlikElzin-kilaka, stelle das Ziellevel auf das ein, was du brauchst.
Drew Noakes
Kann jemand erklären, warum er bestimmte Moduleinstellungen im Konfigurationsbildschirm für globale Einstellungen und nicht in den Moduleinstellungen einfügt?
MK.
61

In IntelliJ IDEA 14.1 befindet sich die "Zielbytecode-Version" an einer anderen Stelle.

Die folgende Änderung hat bei mir funktioniert:

Datei> Einstellungen ...> Erstellen, Ausführen, Bereitstellen> Compiler> Java-Compiler : Ändern Sie die Zielbytecode-Version von 1.5 auf 1.8

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

ROMANIA_engineer
quelle
oder es ist besser, es leer zu lassen, wenn es von jdk bestimmt werden kann!
Dragonborn
Warum gibt es eine andere Konfiguration als die von Maven?
AlikElzin-Kilaka
42

Haben Sie sich Ihre Build-Konfiguration angesehen, sollte es so aussehen, wenn Sie Maven 3 und JDK 7 verwenden

<build>
    <finalName>SpringApp</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        ...
    </plugins>
    ...
</build>
Schweizer
quelle
22

Ich bin darauf gestoßen und das Update bestand darin, zu Projekteinstellungen> Module zu gehen> auf das jeweilige Modul zu klicken> Registerkarte Abhängigkeiten. Ich habe festgestellt, dass das Modul-SDK immer noch auf 1.6 eingestellt ist. Ich habe es auf 1.7 geändert und es hat funktioniert.

Rob Barreca
quelle
Ich habe es versucht ... Ich musste schließlich die einzelnen Module löschen und sie automatisch auflösen lassen.
Akin Okegbile
14

Ich habe in meinem Fall die erforderlichen Optionen ('Ziel-Bytecode-Version') unter Einstellungen> Compiler> Java-Compiler gefunden (Intelij Idee 12.1.3).

eger
quelle
10

Ändern Sie die Compiler-Einstellungsdatei des Projekts im folgenden Pfad und ändern Sie das 'Ziel' in 1.7:

/project/.idea/compiler.xml

<bytecodeTargetLevel>
  <module name="project-name" target="1.7" />
</bytecodeTargetLevel>
Joe Cheng
quelle
Danke, das hat bei mir funktioniert! Vergessen Sie nicht, "Modul
erstellen
5

Ich habe es gelöst, indem ich das Feld leer gelassen habe:

Einstellungen> Compiler> Java Compiler> Projektbytecode-Version

Dann verwendet IntelliJ die JDK-Standardversion.

Robert Moszczynski
quelle
4

Von einem Moment zum anderen bekam ich diesen Fehler auch ohne klaren Grund. Ich habe alle Arten von Einstellungen am Compiler / Modul usw. geändert. Aber am Ende habe ich das IntelliJ-Projekt neu erstellt, indem ich das Maven-Projekt erneut importiert habe, und das Problem wurde behoben. Ich denke, das ist ein Fehler.

IntelliJ 12 129.961

pveentjer
quelle
Gleiches gilt hier für IntelliJ 14.1.2. Das Projekt wurde erneut importiert und behoben.
Srikanth
4

Ich habe dies nach nur einem kleinen Upgrade von IntelliJ IDEA 14 auf v14.1 erreicht. Für mich hat das Ändern einer Bearbeitung von top / parent pom geholfen und dann auf Maven erneut importieren geklickt (falls dies nicht automatisch erfolgt).

Aber es reicht vielleicht gerade aus, mit der rechten Maustaste auf Modul (e) / aggregiertes / übergeordnetes Modul und Maven -> Reimport zu klicken.

OMax
quelle
das hat bei mir funktioniert! Ich habe es für mein Top-Level-Modul und meine
untergeordneten
2

Ich habe die folgende Methode gelöst

Datei >> Projektstruktur >> Projekt >> Projektsprachenstufe -> richtige Version einstellen (Beispiel: 1.5)

mati
quelle
1

Überprüfen Sie .idea / misc.xml. Manchmal müssen Sie das Attribut languageLevel = "JDK_1_X" manuell ändern

kai
quelle
1

Wenn es sich um ein Gradle-Projekt handelt, suchen Sie in Ihrer build.gradle-Datei nach folgenden Einstellungen:

sourceCompatibility = "xx"
targetCompatibility = "xx"

Für alle Unterprojekte können Sie in Ihre Root-Datei build.gradle Folgendes einfügen:

subprojects { project ->
    sourceCompatibility = "1.7"
    targetCompatibility = "1.7"
}

Obwohl Sie die Sprachniveaus manuell unter Idee> Einstellungen festlegen können, synchronisiert Idea bei einem Gradle-Projekt automatisch Modul-IML-Dateien aus den Gradle-Einstellungen (getestet mit Idea 15+). Alle Ihre manuellen Änderungen werden also überschrieben, wenn Gradle aktualisiert wird.

Basierend auf der Gradle-Dokumentation wird die aktuelle JVM-Konfiguration verwendet, wenn diese nicht festgelegt sind.

Cagatay Kalan
quelle
1

Ich habe einen anderen Weg gefunden, um auf diesen Fehler zu stoßen. Sie können dies erhalten, wenn Sie Ihre Verzeichnisstruktur neu organisiert haben und einer Ihrer Poms auf das alte übergeordnete Element zeigt, das Javac nicht mehr konfiguriert (da diese Konfiguration auf eine mittlere Ebene verschoben wurde). In diesem Fall ist die oberste Ebene standardmäßig 1,5 und der schlecht benommene Pom der unteren Ebene erbt sie.

Wenn Sie diesen Fehler sehen, sollten Sie außerdem überprüfen, ob Ihre POM-Struktur ordnungsgemäß mit Ihrer Verzeichnisstruktur übereinstimmt.

Gus
quelle
1

Wenn der Maven-Build einwandfrei funktioniert, versuchen Sie, die Struktur von Maven- und IntelliJ IDEA-Projekten zu synchronisieren.

Klicken Sie im Maven-Werkzeugfenster auf die Schaltfläche Aktualisieren Aktualisierung. Durch Drücken dieser Taste analysiert IntelliJ IDEA die Projektstruktur im Maven-Werkzeugfenster.

Beachten Sie, dass dies möglicherweise nicht hilfreich ist, wenn Sie EAP-Build verwenden, da die Maven-Synchronisierungsfunktion manchmal unterbrochen sein kann.

naXa
quelle
0

Stellen Sie sicher, dass die richtige Abhängigkeit ausgewählt ist. Datei> Projektstruktur

Wählen Sie Ihr Projekt aus und navigieren Sie zur Registerkarte Abhängigkeiten. Wählen Sie die richtige Abhängigkeit aus der Dropdown-Liste aus oder erstellen Sie eine neue.

Viraj Kulkarni
quelle
0

Wenn nicht alle vorherigen Lösungen für Sie funktioniert haben (was mein Fall war), können Sie die Intellij-Konfigurationsdateien löschen:

  • project_directory / .idea / compiler.xml
  • project_directory / .idea / encodings.xml
  • Projektverzeichnis / .idea / misc.xml
  • Projektverzeichnis / .idea / modules.xml
  • Projektverzeichnis / .idea / vcs.xml
  • Projektverzeichnis / .idea / workspace.xml
  • usw.

Intellij wird später neue regenerieren. Seien Sie jedoch vorsichtig, dies löscht auch alle auf dem Projekt vorgenommenen Intellij-Konfigurationen (dh: Konfiguration des Debug-Modus, ...)

Youness Marhrani
quelle
0

Sie müssen die Java-Compilerversion in der Build-Konfiguration ändern.

Geben Sie hier die Bildbeschreibung ein

Nirbhay Rana
quelle