IntelliJ IDEA 13 використовує Java 1.5, незважаючи на встановлення 1,7


147

Незважаючи на те, що вказано JDK 1.7 у всіх налаштуваннях проекту (включаючи File -> Project Structure -> Project :: Project SDK), наступна помилка виникає IntelliJ 13при спробі складання простого коду Java 7, який використовує оператор алмазів:

java: diamond operator is not supported in -source 1.5
(use -source 7 or higher to enable diamond operator)

Чи є якесь інше місце в конфігурації, де -source 7слід включити очікувану опцію?


8
Ви пробували: File -> Project Structure -> Project :: Project language levelперейти на Diamonds, ARM, multi-catch etc?
Адам Шахабов

39
Так. Як виявляється, є ще одна опція в розділі Файл -> Структура проекту -> Модулі :: Джерела (поруч із Шляхами та Залежностями), і є опція "Мова рівня", яку також потрібно правильно встановити. Дякую всім хлопцям за коментарі та відповіді! :-)
PNS


33
Є 3 місця, які потрібно оновити. (1) Файл -> Налаштування (Ctrl + alt + s для ярлика), потім "Створення, виконання, розгортання"> Компілятор> Компілятор Java та змініть "Цільову версію байт-коду" на потрібну версію Java. (2 та 3) Інше місце знаходиться у розділі Файл> Структура проекту (Ctrl + Alt + Shift + S)> "Налаштування проекту"> "Проект" змініть SDK проекту, щоб вказати на відповідну версію Java та встановіть рівень мови проекту на правильна версія. Допомога в коді лише змінює рівень мови для вас, на жаль, роблячи це роздратуванням для нових проектів.
8bitme

2
Що робити, якщо у моєму проекті є 200 модулів, чи повинен я витрачати цілий день на їх повторне звернення?

Відповіді:


114

Якщо нічого з цього не допомагає (мій випадок), ви можете встановити його у своєму pom.xml, як-от так:

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

Як згадував тут цей класний хлопець: https://stackoverflow.com/a/25888116/1643465


4
хороша ідея, але не
вкладайте ваших чітких змін

8
Це вирішило для мене питання, дякую! Як це може "підірвати налаштування товаришів по команді"? Якщо мета проекту - 1,7, це 1,7. Це не так, як у кожного товариша по команді є різне цільове середовище.
isapir

1
Чудово, мій проект Maven.
huuthang

1
Для нових проектів Maven цей параметр може бути доданий до проектів Maven за замовчуванням. Використовуйте налаштування | Редактор | Шаблони файлів та кодів | Мавен | Maven Projects.xml <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> Форум підтримки InteliJ
pRmdk

Це спрацювало для мене. Але лише коли я перезапустив IntelliJ, я спробував просто відновити проект сам, і це не вийшло.
Metin Dagcilar

155

Перевірте рівень мов проекту / модуля (Структура проекту | Проект; Структура проекту | Модулі | Ім'я модуля | Джерела). Ви також можете поглянути на Налаштування | Укладач | Java-компілятор | Версія байтового коду на модуль.

Встановіть також це:

Файл -> Структура проекту -> Модулі :: Джерела (поруч із Шляхами та Залежностями), який має опцію "Мова рівня", яку також потрібно правильно встановити.


2
І перевірте, чи Additional command line parametersв Java Compilerналаштуваннях порожнє.
NeplatnyUdaj

2
Примітка: третє (Файл -> Структура проекту -> Модулі :: Джерела) - це те, що вирішило це для мене.
Пітер

Корисні скріншоти цього процесу в цій відповіді: stackoverflow.com/a/21747329/1146608
Патрік М

1
Якщо ви користуєтеся Maven, потрібно змінити pom: stackoverflow.com/questions/27037657/…
Benj

11
+1 для рівня мови. Не повинно бути ТАКОЖ МНОГО місць для встановлення та встановлення та повторного встановлення тієї самої речі # $% ^!
G. Ann - Команда SonarSource

52

[Для IntelliJ IDEA 2016.2]

Я хотів би розширити частину відповіді Петра Громова з оновленим скріншотом. Конкретно ця деталь:

Ви також можете поглянути на Налаштування | Укладач | Java-компілятор | Версія байтового коду на модуль.

Я вважаю, що (принаймні, у 2016 р. 2): перевірка різних комісій у скидах gitдо 1,5.

Версія байтового коду на модуль


5
Я відмовився підтримувати їх у правильній кількості (чомусь вони змінюються - я припускаю, коли це роблю git checkout). Я виявив, що мені вдалося безпечно видалити записи з цього списку; модуль повертається до використання "Версії байт-коду проекту".
Birchlabs

Ці числа також для мене несподівано повертаються до 1,5. Лише жорстке кодування джерела компілятора та цільових версій у файлі pom.xml працює послідовно.
sheldonkreger

Зверніть увагу на параметр "Версія байтового коду проекту" вгорі цього екрана, а також виділену "Цільова версія байт-коду".
Василь Бурк

@Birchlabs Дякую, я думаю, що це правильна відповідь.
щебетати

1
Це єдине рішення, яке вирішило проблему для мене, IntelliJ IDEA 2019.1
Жоао Роша да Сілва

19

Крім того, ви можете застосувати maven-компілятор-плагін з відповідною версією Java, додавши це до свого 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>

Це спрацювало після вилучення проекту, видалення папки .idea та .iml-файлу, всі вони відтворені при повторному відкритті проекту.
Андрій

1
Натиснувши кнопку "оновити Maven", ідея повинна спрацювати.
OlgaMaciaszek

@OlgaMaciaszek освіжаючого потрібно було, щоб рішення працювало. Дякую!
Payne

14

Я спробував внести зміни в Intellij IDEA, як показано нижче:

1.

File >> Settings >> Build, Execution, Deployment >> Compiler >> Java Compiler >> project bytecode version: 1.8 >> Per-module bytecode version: 1.8

2.

File >> Project Structure >> Project Settings >> Project >> SDK : 1.8, Project Language : 8 - Lambdas
File >> Project Structure >> Project Settings >> Modules >> abc : Language level: 8 - Lambdas

але нічого не спрацювало, вернувши версії до java 1.5, як тільки я її врятував.

Однак додавання нижче рядків до кореня (рівень проекту) pom.xml працювало на вирішенні вищезгаданої проблеми: (обидва варіанти працювали для мене)

Варіант 1:

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

Варіант 2:

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

11

Файл-> Структура проекту-> Налаштування проекту-> Проект-> Рівень мови проекту

Файл-> Структура проекту-> Налаштування проекту-> Модулі-> Мовний рівень

Змініть рівень за допомогою спадного меню


4

У своєму командному рядку (термінал Unix) перейдіть до кореневої папки проекту та зробіть це

find . -type f -name '*.iml' -exec sed -i '' s/JDK_1_5/JDK_1_8/g {} +

Це змінить властивість рівня мови у всіх .iml-файлах вашого проекту з java 1.5 на java 1.8.


Ще не впевнений, але вам може знадобитися замінити версію JDK у compiler.xmlкорені проекту (IntelliJ 2017.2):sed 's/target="1.5"/target="1.8"/g' .idea/compiler.xml
Олександр Волинець

compiler.xml може бути специфічним для вашого проекту. Ця команда націлена лише на * .iml файли, які потрібні лише Intellij. Можливо, вам доведеться відрегулювати параметри мови у своєму maven pom.xml або у вашому випадку compiler.xml незалежно від IDE.
Saideep Sambaraju

1
@SaideepSambaraju compiler.xml присутній у будь-якому проектному проекті, який я бачив. Як я бачу, цей файл є моделлю Параметри-> Компілятор (linux) Налаштування-> Компілятор (MacOS). Ви можете використовувати його для зміни цільової версії за сценарієм, як сказав Олександр, або вручну без інтерфейсу користувача.
Сергій Саргсян

@SergeySargsyan - Я щойно перевірив це, він знаходиться у папці .idea, яку я не міг знайти, шукаючи. Дякуємо, що вказали на це.
Сайдеп Самбараджу

2

По- перше, вам необхідно змінити «байткод версію проекту» під File > Settings,Compiler > Java Compiler

По-друге, зробити повну перебудову.


2

У мене така ж проблема, але з різною ситуацією. Я можу без будь-якої проблеми компілювати з maven в командному рядку ( mvn clean install), але в Intellij я завжди був"java: diamond operator is not supported in -source 1.5" виникала помилка компіляції, незважаючи на те, що я встановив плагін maven-компілятор з java 1.8 у pom.xml.

Виявилося, у мене є налаштування віддаленого сховища в налаштуваннях мого Maven.xml, від якого залежить проект, але Intellij використовує власну Maven, яка не має однакових налаштувань з моєю локальною Maven.

Тож моє рішення було змінити параметр maven Intellij ( Settings -> Build, execution, Deployment -> Maven -> Maven home directory) на використання локального maven.


2

У IntelliJ Community Edition 2019.02 для мене працювали зміни наступних налаштувань

  1. Оновіть файл-> Структура проекту-> Налаштування проекту-> Проект-> Рівень мови проекту до Java 11 (оновлення до версії Java, яку ви хочете використовувати у своєму проекті) за допомогою спадного меню.

  2. Оновіть файл-> Структура проекту-> Налаштування проекту-> Модулі-> Мовний рівень

  3. Оновіть файл-> Налаштування-> Збірка, виконання, розгортання -> Компілятор -> Компілятор Java-> Версія байт-коду проекту до Java 11.

  4. Оновіть цільову версію для всіх записів у розділі Файл-> Налаштування-> Збірка, виконання, розгортання -> Компілятор -> Компілятор Java-> Версія байтового коду модуля.


0

У мене в IntelliJ 2017 працювало таке майно

  <properties>
        <java.version>1.8</java.version>       
  </properties>

Це працює лише в тому випадку, якщо ви використовуєте такий батьківський проект, як весняний завантажувач.
wggn

0

Ще одна річ , яка може привести до цього надає неправильне versionз <parent>проекту.

У моєму випадку він вказував на неіснуючий проект, і чомусь IntelliJ зменшив версію в налаштуваннях до 1.5 і пізніше, коли я її виправив, він все ще інтерпретував цільову версію коду як 5 (незважаючи на встановлення на 11).

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