Настройка компилятора maven по умолчанию
В настоящее время я пишу небольшое Java-приложение самостоятельно, с несколькими файлами maven pom.xml. Я хочу сделать все мои пакеты maven для компиляции с помощью jdk 1.6, и я не могу найти хороший способ сделать это, не вручную настраивая его на каждом отдельном POM - мне больно копировать и вставлять
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
в каждом файле pom.xml, который я генерирую.
Есть ли более простой способ решить эту проблему?
Ответы
Ответ 1
Создайте проект pom-only (<packaging>pom</packaging>
) с настройками компилятора (и любыми другими настройками по умолчанию), которые вы хотите. Вы даете это как любой другой проект (отпустите его, разворачивайте в своем репозитории Maven и т.д.).
Поместите объявление parent
в начало ваших файлов pom:
<parent>
<groupId><!-- parent group id --></groupId>
<artifactId><!-- parent artifact id --></artifactId>
<version><!-- parent version --></version>
</parent>
Это не очень помогает, если все, что вы хотите установить, - это настройки компилятора. Но если вы обнаружите, что настраиваете множество подключаемых модулей, отчетов и зависимостей одинаково в рамках проекта, вы можете создать одного родителя, чтобы управлять ими всеми.
BTW - будьте осторожны с объявлением dependencies
и plugins
в родительском файле pom. Обычно вы предпочитаете dependencyManagement
и pluginManagement
. Подробнее см. .
Ответ 2
Вы можете указать этот плагин и конфигурацию в своем ~/.m2/settings.xml
, который затем применит его ко всем проектам.
Однако это имеет недостаток в том, что ваши проекты больше не переносимы - попытка создания одного и того же кода с одним и тем же pom.xml завершится неудачно на других машинах, которые не имеют одинаковых значений settings.xml
, как вы.
Ответ 3
Мне надоело копировать и вставлять
Да, и вы должны использовать POM inheritance, чтобы избежать этого и настроить maven-compiler-plugin
в родительский POM.
Другим вариантом было бы использовать решение, предложенное @matt (и он прибил плюсы и минусы использования settings.xml
).
В обоих случаях это обычно параметр, который мне нравится проверять с помощью maven-enforcer-plugin
и его requireJavaVersion
правило, которое вы должны настроить следующим образом:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>1.6</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
Но он может сделать больше (например, проверку версии maven). Очень полезно.
Ответ 4
Я хочу сделать все мои пакеты maven для компиляции с помощью jdk 1.6
Если это многомодульный проект, просто установите эти параметры в POM верхнего уровня под pluginManagement
.
Если у вас есть много независимых проектов, просто скопируйте и вставьте эту конфигурацию. Остерегайтесь "умных" решений, таких как установка этого в глобальном масштабе. Когда-нибудь вам захочется использовать разные настройки компилятора для одного или двух ваших проектов, и начнется кошмар: -)
Помните,...
Держите все как можно проще, но не проще.