зупинити IntelliJ IDEA для перемикання рівня мови Java щоразу, коли пам’ять буде перезавантажена (або змінити стандартний рівень мови проекту за замовчуванням)


145

За допомогою IntelliJ 12 у мене є проект java, і я використовую maven з pom.xml. Мій проект використовує java8, але, здається, під час імпорту проекту рівень мови проекту за замовчуванням встановлено на 6.

Я можу змінити рівень мови на 8,0 (F4 -> Модулі -> Рівень мови), однак щоразу, коли я редагую свій pom.xml, рівень проекту повертається на "використовувати рівень мови проекту", і мені доведеться знову редагувати ці налаштування та знову.

Чи потрібно щось додати до pom.xml, щоб встановити рівень мови за замовчуванням 8,0?


2
Чи вказує ваш пом у джерелі та цільовому рівні в конфігурації плагіна компілятора?
Марк Ротвевель

так, джерело та ціль встановлено на 1,8. Однак він не був вказаний під час імпорту проекту
Квентін

@Quentin У такій ситуації може бути найпростішим повернути проект у нове місце і дозволити IntelliJ імпортувати це замість нього заново.
Thorbjørn Ravn Andersen

Відповіді:


174

Відповідно до коментаря Марка, ось як це зробити:

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

10
плагін присутній у цілі pom, wuth 1,8, але він нічого не змінює :(
Квентін

2
У вас включений автоматичний імпорт вашої Maven pom? Ви перевірили батьків (і бабусь і дідусів), чи є там налаштування 1.6, які можуть суперечити?
vikingsteve

1
Насправді батьківський проект визначений за допомогою Spring-boot-starter-parent-1.1.9.RELEASE.pom.xml, а в pluginManagement maven-компілятор-плагін встановлений на 1.6 ... Я намагався замінити ці налаштування без жодного успіху. Схоже, весняний завантажувач 1.2.RC більше не включає плагін maven-компілятор, я спробую. - включений автоматичний імпорт.
Квентін

Чудово, це могло бути чому. Якщо ви вказали ту саму версію плагіну компілятора maven, можливо, буде змінено налаштування джерела / цілі. Можливо, спробуйте це у вашому проекті root pom.xml.
vikingsteve

2
У моєму випадку це не спрацювало. Я повинен був видалити настройки , згадані в цій відповіді і замість того, щоб додати наступне:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
генонім

99

Більш коротка версія відповіді вікінга - це:

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

6
На один роздратування менше!
Артур Цічош

4
Це була не просто коротка версія, а необхідна в моєму випадку. Відповідь vikingsteve не спрацювала для мене. Тож я видалив цю настройку і скористався цим.
генонімічний

23

Я думаю, це пов'язане з концептуальним конфліктом між плагіном компілятора Maven та ідеєю IntelliJ. Мабуть, новіші версії плагіну компілятора мають рівень за замовчуванням 1,5 (див Http://maven.apache.org/plugins/maven-compiler-plugin/ ). Отже, якщо плагін компілятора взагалі використовується в проекті, а рівень компілятора явно не встановлений у pom.xml, коли POM повторно обробляється, рівень повернеться до типового.

Тож існує концептуальний конфлікт, який ігнорується Intellij IDEA. IDE все ще дозволяє встановити параметри проекту та модуля, але не надає жодних попереджень та відгуків про те, що цей параметр контролюється pom.xml. Рішення полягають у тому, щоб явно дозволити переосмислення параметрів плагіну компілятора POM (можливо, не розумно, тому що, що відбувається, коли ви використовуєте maven в командному рядку), або деактивувати елементи керування в IDE, коли цей параметр з POM діє.

Рішення в даний час полягає в тому, щоб встановити бажаний рівень компілятора в плагіні компілятора в пом, повторний імпорт, а не намагатися встановити його в налаштуваннях модуля.


1
Домовились. Відсутність відгуків про те, що настройки в IDEA просто ігноруються та повторно імпортуються з POM, дуже заплутано, особливо при використанні батьківського POM.
Gillfish

9

Я модернізую проект з JDK 8 до JDK 10+. У мене були вказані правильно властивості компілятора:

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

Однак проект «Ідея» продовжує скидати рівень мови до 8.

Зрештою я зрозумів, що процес імпорту Maven Idea використовував JDK 8 для імпорту проекту, який обмежив рівень мови до <= 8.

Для виправлення я оновив властивість "JDK для імпортера" у розділі Налаштування -> Збірка, виконання, розгортання -> Інструменти збирання -> Maven -> Імпорт для використання JDK 11.

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


Вирішили мою проблему. Схоже, IntelliJ оновив свій внутрішній JRE з пізнішими випусками (десь близько 2019.2). Досить важко відслідковувати ...
Хасан Аслам

8

Це можна зробити двома способами, додайте будь-який з них у свій файл pom.xml:

Спочатку - додайте властивості

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

друге - Додати плагін

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

Дайте мені знати, чи допоможе це.


Я зробив і те і інше, і компілятор все ще скидається до 1,5 кожного разу, коли я намагаюся запустити mvn компіляцію з IntelliJ. Однак він працює чудово, коли запускається з командного рядка поза IntelliJ.
користувач26270

1
в IntelliJ не забудьте повторно імпортувати параметри maven після модифікації. Рішення працювало на мене.
П’єрлуіджі Вернетто

4

Жодне з рішень не допомогло в моєму випадку. Мені не потрібно було вказувати жодну версію Java в моїй pom.xml.

Мені потрібно було відкрити <project-name>.imlфайл і змінити версію JDK там.

Оригінал:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Оновлено:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Це зовсім не має сенсу. Ні в якому разі я не вказав версію JDK для Java 1.5.


Це само по собі вирішило проблему для мене в IntelliJ 2019.3, не вимагаючи, щоб я щось міняв у своїй пом’ї чи деінде. Я так само ніде не вказував JDK 1.5.
Майкл Крістофф

Приклад: <... LANGUAGE_LEVEL = "JDK_11">
Даніель Де Леон

1

Я багато боровся з цією проблемою, завдяки побудові мікросервісів з Dropwizard. Врешті-решт я дізнався, що я маю свої властивості збирання у неправильному файлі pom (Основна служба pom.xml).

Отже, хоча інші пакунки більше схожі на бібліотеки , я не зміг використовувати синтаксис Java 8.

Коли я відновив плагін збірки у "глобальний" .pom.xml"файл, усі дочірні контейнери змогли використовувати новий синтаксис.

Може допомогти комусь, хто має проблеми з проектами з кількома контейнерами


0

Для мене працювало рішення оновлення POM (плагіни плюс властивості) до потрібної версії компілятора Java (у моєму випадку 1_7). Однак, оскільки .iml-файл для кожного проекту був згенерований з оригінальною пом (з версією компілятора за замовчуванням 1_5, як це пояснив хтось вище), має JDK-версію 1_5, це все одно перевершує пом-версію.

Я видалив папку .idea вручну та імпортував модуль в IntelliJ з повторним імпортом з оновленої пам’яті. Коли я повторно імпортував Модуль з оновленої POM, я міг побачити, що файли iml мали оновлену версію JDK (у моєму випадку 1_7).


0

Я мав дотримуватися ще один крок, крім встановлення властивостей збірки maven , додавання плагіну maven-компілятор та зміни версії Java у файлі .iml . (кожен задокументований вже в інших відповідях). Також ви повинні встановити версію компілятора в налаштуваннях .

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