Настройка компилятора по умолчанию
Прямо сейчас я пишу небольшое 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, который я генерирую.
Есть ли более простой способ решить эту проблему?
4 ответа
Создать только пом (<packaging>pom</packaging>
) проект, который имеет необходимые настройки компилятора (и любые другие настройки по умолчанию). Вы относитесь к нему как к любому другому проекту (выпустите его; разверните его в репозитории Maven и т. Д.).
Положить parent
объявление вверху ваших файлов pom:
<parent>
<groupId><!-- parent's group id --></groupId>
<artifactId><!-- parent's artifact id --></artifactId>
<version><!-- parent's version --></version>
</parent>
Это не очень помогает, если все, что вы хотите установить, это настройки компилятора. Но если вы обнаружите, что настраиваете множество плагинов, отчетов и зависимостей одинаково для всего проекта, вы можете создать одного из родителей, чтобы управлять ими всеми.
Кстати - будьте осторожны при объявлении dependencies
а также plugins
в вашем родительском файле POM. Обычно вам захочется dependencyManagement
а также pluginManagement
, Смотрите документацию для более подробной информации.
Вы можете указать этот плагин и конфигурацию в вашем ~/.m2/settings.xml
, который затем будет применять его ко всем проектам.
Однако это имеет недостаток в том, что ваши проекты перестают быть переносимыми - попытка создать один и тот же код с тем же pom.xml не удастся на других машинах, которые не имеют того же самого. settings.xml
ценности, как вы.
Я устал от копирования и вставки
Да, и вы должны использовать наследование POM, чтобы избежать этого и настроить maven-compiler-plugin
в родительском ПОМ.
Другим вариантом было бы использовать решение, предложенное @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). Очень полезно.
Я хочу, чтобы все мои maven пакеты компилировались с jdk 1.6
Если это многомодульный проект, просто поместите эти настройки в POM верхнего уровня в pluginManagement
,
Если у вас много независимых проектов, просто скопируйте и вставьте эту конфигурацию. Остерегайтесь "умных" решений, таких как установка этого где-нибудь во всем мире. Однажды вы захотите использовать разные настройки компилятора для одного или двух ваших проектов, и кошмар начнется:-)
Помните...
Держите вещи как можно проще, но не проще.