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

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

Відповіді:


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 або рівня мови за замовчуванням проекту


6
У налаштуваннях проекту слід налаштувати кожен модуль на Project defaultрівні мови (у Sourcesвкладці).
Бастієн Янсен

@BastienJansen спасибі Відредагував відповідь на основі ваших коментарів!
Неррв

7
Project Settingsзнайдено уFile -> Project Structure
Карл

6
Чому це потрібно встановити у стільки місць, це поза мною. Дякую.
Річард Раст

1
Цей параметр проекту буде перезаписаний під час повторного імпорту, якщо ви використовуєте Maven. Це трапляється щоразу, коли ви змінюєте пом., І це швидко зірве вам необхідність постійно оновлювати налаштування інтелігенції. Для проектів Maven наведені нижче зміни пам’яті є більш підходящими.
Джей

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>

4

Файл> Налаштування> Збір, виконання, розгортання> Компілятор Java

Змініть версію байт-коду Target на 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

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 все одно буде відповідати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.