Intellij - Neuere Java 8-Klassen können nicht verwendet werden - Fehler: "Verwendung der API als @since 1.6+ dokumentiert."

168

Ich versuche, eine java.lang.function.Functionin meiner Java 8-Codebasis zu verwenden, erhalte jedoch weiterhin den folgenden Fehler in Intellij.

Verwendung der als @since 1.6+ dokumentierten API Bei dieser Überprüfung werden alle Verwendungen von Methoden ermittelt, deren Dokumentation das @since-Tag enthält. Dies kann nützlich sein, wenn die Entwicklung unter einer neueren SDK-Version als Zielplattform für die Produktion durchgeführt wird

Ich habe anscheinend die richtigen Projekt- und Compilereinstellungen

Projekteinstellungen: (Datei -> Projektstruktur)

Project Settings -> Project -> Project SDK = Java 1.8
Project Settings -> Project -> Project Language Level = 8 - Lambdas, Type Annotations etc

Compiler-Einstellungen: (Datei -> Einstellungen)

Build, Execution, Deployment -> Compiler -> Java Compiler -> Project Bytecode Version : 1.8
Build, Execution, Deployment -> Compiler -> Java Compiler -> Per module Bytecode Version -> Target Bytecode Version : 1.8

Was ist das Problem?

Nerrve
quelle

Antworten:

365

Die Antwort wurde basierend auf dem Kommentar von Bastien Jansen bearbeitet.

Es scheint, dass es eine andere Projekteinstellung gibt, die sich auf die Compilerebene auswirkt. Ein subtiler Hinweis auf dieses Problem ist, wenn sich Ihr Compiler darüber beschwert, dass sich die Quell- und Ziel-Java-Version von der unterscheidet, die Sie beim Kompilieren des Codes angegeben haben

Warning:java: source value 1.5 is obsolete and will be removed in a future release
Warning:java: target value 1.5 is obsolete and will be removed in a future release
Warning:java: To suppress warnings about obsolete options, use -Xlint:-options.

Um dies loszuwerden, müssen Sie sich öffnen

File -> Project Structure -> Project Settings -> Modules -> "Your Module Name" -> Sources -> Language Level

und ändern Sie dies auf die gewünschte Stufe, dh 1.8 oder die Sprachstufe Projektstandard

Nerrve
quelle
6
In den Projekteinstellungen sollten Sie jedes Modul so konfigurieren, dass es die Project defaultSprachstufe verwendet (auf der SourcesRegisterkarte).
Bastien Jansen
@ BastienJansen danke. Die Antwort wurde basierend auf Ihren Kommentaren bearbeitet!
Nerrve
7
Project Settingswird gefunden inFile -> Project Structure
Karl
6
Warum dies an so vielen Orten eingestellt werden muss, ist mir ein Rätsel. Vielen Dank.
Richard Rast
1
Diese Projekteinstellung wird beim erneuten Import überschrieben, wenn Sie Maven verwenden. Dies geschieht jedes Mal, wenn Sie den POM wechseln, und wird Sie schnell frustrieren, wenn Sie Ihre Intellij-Einstellungen auf dem neuesten Stand halten müssen. Für Maven-Projekte sind die folgenden Änderungen besser geeignet.
Jay
51

Wenn Sie maven verwenden, fügen Sie die folgende Zeile in Ihre Konfigurationsdatei pom.xml ein und importieren oder erstellen Sie sie erneut aus maven.

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

Andernfalls wählen Sie den Java-Compiler und die Sprachstufe unter dem Pfad aus.

Datei> Projektstruktur> Projekteinstellungen> Module> Modulname> Quellen> Sprachniveau> Wählen Sie das gewünschte aus.

Geben Sie hier die Bildbeschreibung ein

Ändern Sie das Sprachniveau von hier aus: -

Geben Sie hier die Bildbeschreibung ein

Ajay Kumar
quelle
1
Vielen Dank dafür. Ich weiß nicht, warum dies nicht die Standardeinstellung ist. Sogar in 2019.1.3, die ich benutze.
Eodeluga
33

Wenn Sie Maven verwenden und Ihre pom.xmlProjekteigenschaften korrekt konfiguriert sind

<project xmlns="...> 
....
<properties>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project

Sie können Maven-Parameter erneut in das intellij-ideaProjekt importieren. Klicken Sie mit der rechten Maustaste auf den Projektstammeintrag, Maven -> Reimportder sich unten befindet.

Das Bild zeigt, dass Maven vom vorletzten Element im Projekt-Rechtsklick-Menü an zweiter Stelle steht

Boris Treukhov
quelle
25

Ich habe es einfach wie folgt behoben:

Klicken Sie mit der rechten Maustaste auf das Projekt -> Moduleinstellungen öffnen -> Module -> Quellen -> 8 oder höher

Geben Sie hier die Bildbeschreibung ein

Und dann

Geben Sie hier die Bildbeschreibung ein

Wenn der Fehler weiterhin auftritt und maven verwendet wird , müssen Sie die Build-Konfiguration in Folgendes hinzufügen pom.xml:

<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>
Gehört
quelle
4

Datei> Einstellungen> Erstellen, Ausführen, Bereitstellen> Java Compiler

Ändern Sie die Zielbytecode-Version des Moduls, für das Sie arbeiten, in 1.8.

Wenn Sie Maven verwenden

Fügen Sie das Compiler-Plugin zu pom.xml unter dem Projektknoten der obersten Ebene hinzu:

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

harun ugur
quelle
1

Wenn Sie Gradle verwenden, vergessen Sie nicht, sicherzustellen, dass Folgendes auf 1,8 und nicht auf 1,5 eingestellt ist (zum Beispiel aus bizarren Gründen in Intelij standardmäßig 1,5), unabhängig davon, was Sie auf Projektebene tun, um den Compiler festzulegen Diese Einstellung führt dazu, dass Sie weiterhin Probleme mit Java 8-Funktionen haben, die nicht erkannt werden:

version '1.0-SNAPSHOT'

apply plugin: 'groovy'
apply plugin: 'java'

sourceCompatibility = 1.8
Beezer
quelle
1

Möglicherweise hat Ihre Konfiguration des Repositorys Eigenschaften einschließlich der Compilerversion. settings.xmlDatei untersuchen .

<jdk>1.8</jdk>
</activation>
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
刘泽森
quelle
1

Es gibt einen anderen Ort, der dieses Problem verursachen könnte, unabhängig davon, ob Sie Maven oder Gradle verwenden oder nicht.

In Settings | Editor | Inspections | Java language level migration aids | Usages of API which isn't available at the configured language levelwird der Standardwert (glaube ich) auf gesetzt Respecting to project language level settings, aber er kann auf gesetzt werden Higher than:, wodurch die Projekteinstellungen ignoriert werden.

Das heißt, wenn Sie den Anweisungen in den anderen Antworten folgen und die Sprachstufe Ihres Projekts auf beispielsweise 8 einstellen Higher than: 7, die Inspektion jedoch auf eingestellt ist, wird IDEA immer noch einen Anfall auslösen.

Cody S.
quelle