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

Используя IntelliJ 12, у меня есть проект java, и я использую maven с pom.xml. В моем проекте используется java8, но, по-видимому, по умолчанию уровень проекта по умолчанию был установлен на 6 при импорте проекта.

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

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

Ответ 1

В соответствии с комментарием Mark, вот как это сделать:

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

Ответ 2

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

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

Ответ 3

Я думаю, что это связано с концептуальным конфликтом между плагином компилятора 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, повторном импорте, а не пытаться установить его в настройках модуля.

Ответ 4

Есть два способа сделать это, добавить один из них в файл pom.xml:

Сначала добавить свойства

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

second-Добавить плагин

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

Сообщите мне, если это поможет.

Ответ 5

Я много боролся с этой проблемой из-за создания микросервисов с Dropwizard. В конце концов я узнал, что у меня были свойства сборки в неправильном файле pom (основная служба pom.xml).

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

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

Может помочь кому-то, имеющему проблемы с многоконтейнерными проектами

Ответ 6

Ни одно из решений не помогло в моем случае. Мне не нужно было указывать какую-либо версию 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.

Ответ 7

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

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

Ответ 8

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

Ответ 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".

enter image description here