настройка компилятора по умолчанию - PullRequest
29 голосов
/ 28 марта 2010

Сейчас я пишу небольшое 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 ]

16 голосов
/ 28 марта 2010

Создайте проект только для pom (<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. Подробнее см. документация .

8 голосов
/ 28 марта 2010

Вы можете указать этот плагин и конфигурацию в вашем ~/.m2/settings.xml, который затем применит его ко всем проектам.

Однако это имеет недостаток в том, что ваши проекты перестают быть переносимыми - попытка создать тот же код с тем же pom.xml не удастся на других машинах, которые не имеют таких же значений settings.xml, как у вас.

5 голосов
/ 28 марта 2010

Я устал от копирования и вставки

Да, и вам следует использовать POM наследование , чтобы избежать этого и настроить 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). Очень полезно.

3 голосов
/ 30 марта 2010

Я хочу собрать все свои maven-пакеты для jdk 1.6

.

Если это многомодульный проект, просто установите эти настройки в POM верхнего уровня в pluginManagement.

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

Помните ...

Делайте вещи максимально простыми, но не проще .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...