остановите IntelliJ IDEA для переключения уровня языка Java каждый раз при перезагрузке pom (или измените уровень языка проекта по умолчанию)


145

Используя IntelliJ 12, у меня есть проект Java, и я использую Maven с pom.xml. Мой проект использует java8, но кажется, что уровень языка проекта по умолчанию был установлен на 6 при импорте проекта.

Я могу изменить уровень языка на 8.0 (F4 -> Модули -> Уровень языка), однако каждый раз, когда я редактирую свой pom.xml, уровень проекта переключается обратно на «Использовать уровень языка проекта», и мне приходится снова редактировать эти настройки и очередной раз.

Что мне нужно добавить в pom.xml, чтобы установить уровень языка по умолчанию 8.0?


2
Ваш pom указывает исходный и целевой уровень в конфигурации плагина компилятора?
Марк Роттвил

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

@Quentin В такой ситуации может быть проще всего отложить проект в новом месте и позволить IntelliJ импортировать его заново.
Турбьёрн Равн Андерсен

Ответы:


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, но не содержит цели 1.8, но он ничего не меняет :(
Квентин

2
У вас есть автоматический импорт вашего Maven Pom? Вы проверили родительские (и прародительские) помы, есть ли там какие-то 1.6 настройки, которые могут конфликтовать?
Викингстев

1
Действительно, родительский проект определен с помощью spring-boot-starter-parent-1.1.9.RELEASE.pom.xml, а в pluginManagement для maven-compiler-plugin установлено значение 1.6 ... Я попытался переопределить эти настройки, но безуспешно. Похоже, весенняя загрузка 1.2.RC больше не включает в себя maven-compiler-plugin, я попробую. - автоматический импорт включен.
Квентин

Отлично, вот почему. Если вы укажете ту же версию плагина компилятора maven, возможно, удастся переопределить настройки источника / цели. Возможно, попробуйте это в корне вашего проекта pom.xml.
Викингстеве

2
В моем случае это не сработало. Мне пришлось удалить настройку, упомянутую в этом ответе, и вместо этого добавить следующее:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
genonymous

99

Более короткая версия ответа викингов:

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

6
На одно раздражение меньше!
Артур

4
Это была не просто короткая версия, а необходимая в моем случае. Ответ викингов на меня не сработал. Поэтому я удалил этот параметр и использовал этот.
геноним

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.

Решение в настоящее время состоит в том, чтобы установить желаемый уровень компилятора в плагине компилятора в 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>

Однако проект Idea продолжит сбрасывать языковой уровень до 8.

В конце концов я понял, что процесс импорта Idea в Maven использует 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 compile из IntelliJ. Тем не менее, он отлично работает при запуске из командной строки за пределами IntelliJ.
user26270

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 для каждого проекта был создан с оригинальным pom (с версией компилятора по умолчанию 1_5, как объяснено кем-то выше), имеет версию JDK 1_5, это все равно переопределяет версию pom.

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


0

Был еще один дополнительный шаг, который я должен был выполнить, помимо настройки свойств сборки maven , добавления плагина maven-compiler-plugin и изменения версии Java в файле .iml . (каждый задокументирован уже в других ответах). Вы также должны установить версию компилятора в настройках .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.