Настройка компилятора по умолчанию

Прямо сейчас я пишу небольшое 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,

Если у вас много независимых проектов, просто скопируйте и вставьте эту конфигурацию. Остерегайтесь "умных" решений, таких как установка этого где-нибудь во всем мире. Однажды вы захотите использовать разные настройки компилятора для одного или двух ваших проектов, и кошмар начнется:-)

Помните...

Держите вещи как можно проще, но не проще.

Другие вопросы по тегам