Intellij - Невозможно использовать более новые классы Java 8 - Ошибка: «Использование API задокументировано как @since 1.6+ ..»

168

Я пытаюсь использовать java.lang.function.Functionв моей кодовой базе Java 8, но я продолжаю получать следующую ошибку в Intellij.

Использование API, задокументированного как @since 1.6+. Эта проверка находит все способы использования, которые имеют тег @since в своей документации. Это может быть полезно, когда разработка выполняется под более новой версией SDK в качестве целевой платформы для производства.

Кажется, у меня правильные настройки проекта и компилятора

Настройки проекта: (Файл -> Структура проекта)

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

Настройки компилятора: (Файл -> Настройки)

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

В чем проблема?

Nerrve
источник

Ответы:

365

Отредактировал ответ на основе комментария Бастьена Янсена.

Кажется, что есть другой параметр проекта, который влияет на уровень компилятора. Тонкое указание на эту проблему - когда ваш компилятор начинает жаловаться на то, что исходная и целевая версии java отличаются от той, которую вы указали во время компиляции кода.

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.

Чтобы избавиться от этого, нужно открыть

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

и измените его на желаемый уровень, т. е. 1,8 или уровень языка проекта по умолчанию

Nerrve
источник
6
В настройках проекта вы должны настроить каждый модуль на использование Project defaultязыкового уровня (на Sourcesвкладке).
Бастьен Янсен
@BastienJansen спасибо. Отредактировал ответ на основе ваших комментариев!
Нервный
7
Project Settingsнаходится вFile -> Project Structure
Карл
6
Почему это должно быть установлено во многих местах, мне не под силу. Спасибо.
Ричард Раст
1
Этот параметр проекта перезаписывается при повторном импорте, если вы используете Maven. Это происходит каждый раз, когда вы меняете помпу, и быстро расстраивает вас от необходимости обновлять настройки intellij. Для проектов Maven нижеприведенные изменения в pom более уместны.
Джей
51

Если вы используете maven, то добавьте строку ниже в файле конфигурации pom.xml, а затем заново импортируйте или создайте его из 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>

В противном случае выберите компилятор Java и уровень языка снизу пути.

Файл> Структура проекта> Настройки проекта> Модули> Имя вашего модуля> Источники> Уровень языка> выберите тот, который вам нужен.

введите описание изображения здесь

Изменить уровень языка здесь: -

введите описание изображения здесь

Аджай Кумар
источник
1
Спасибо тебе большое за это. Не знаю, почему это не по умолчанию. Даже в 2019.1.3, который я использую.
eodeluga
33

На самом деле, если вы используете Maven и pom.xmlсвойства вашего проекта настроены правильно

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

Вы можете повторно импортировать параметры Maven в intellij-ideaпроект - щелкните правой кнопкой мыши корневую запись проекта, Maven -> Reimportкоторая находится внизу.

На рисунке видно, что Maven является вторым из последних элементов в меню проекта правой кнопкой мыши.

Борис Треухов
источник
25

Я просто исправил это следующим образом:

Щелкните правой кнопкой мыши проект -> Открыть Настройки модуля -> Модули -> Источники -> 8 или выше

введите описание изображения здесь

А потом

введите описание изображения здесь

Если вы все еще сталкиваетесь с ошибкой и используете maven , вы должны добавить конфигурацию сборки в ваш 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>
Hearen
источник
4

Файл> Настройки> Сборка, выполнение, развертывание> Компилятор Java

Измените версию целевого байт-кода на 1.8 модуля, для которого вы работаете.

Если вы используете Maven

Добавьте плагин компилятора в 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>

Харун Угур
источник
1

Если вы используете Gradle, не забудьте убедиться, что для следующего установлено значение 1.8, а не 1.5 (например, по какой-то причудливой причине в Intelij по умолчанию оно равно 1.5), поэтому независимо от того, что вы делаете на уровне проекта, чтобы установить компилятор Уровень совместимости, этот параметр будет вызывать проблемы с функциями Java 8, которые он не распознает:

version '1.0-SNAPSHOT'

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

sourceCompatibility = 1.8
Beezer
источник
1

Может быть, ваш конфиг репозитория имеет свойства, включая версию компилятора. изучить settings.xmlфайл.

<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>
刘泽森
источник
1

Есть еще одно место, которое может вызывать эту проблему, независимо от того, используете ли вы Maven или Gradle.

По Settings | Editor | Inspections | Java language level migration aids | Usages of API which isn't available at the configured language levelумолчанию (я считаю) установлено значениеRespecting to project language level settings , но его можно установить равным Higher than:, что игнорирует настройки проекта.

Это означает, что если вы будете следовать инструкциям в других ответах и ​​установить языковой уровень вашего проекта, скажем, 8, но проверка будет установлена ​​на Higher than: 7, IDEA все равно будет соответствовать.

Коди С
источник