Можно ли переопределить конфигурацию плагина, уже определенного для профиля в родительском POM?

В родительском файле POM моего проекта у меня есть такой профиль, определяющий некоторые конфигурации, полезные для этого проекта (так что я не могу избавиться от этого родительского POM):

<profile>
<id>wls7</id>
...
<build>
  <plugins>
    <!-- use java 1.4 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <fork>true</fork>
        <source>1.4</source>
        <target>1.4</target>
        <meminitial>128m</meminitial>
        <maxmem>1024m</maxmem>
        <executable>%${jdk14.executable}</executable>
      </configuration>
    </plugin>
  </plugins>
</build>

...
</profile>

Но в моем проекте я просто хотел бы переопределить конфигурацию maven-compiler-plugin, чтобы использовать jdk5 вместо jdk4 для компиляции тестовых классов.

Вот почему я сделал этот раздел в POM моего проекта:

<profiles>
  <profile>
    <id>wls7</id>
        <activation>
            <property>
                <name>jdk</name>
                <value>4</value>
            </property>
        </activation>
    <build>
      <directory>target-1.4</directory>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <executions>
            <execution>
              <id>my-testCompile</id>
              <phase>test-compile</phase>
              <goals>
                <goal>testCompile</goal>
              </goals>
              <configuration>
                <fork>true</fork>
                <executable>${jdk15.executable}</executable>
                <compilerVersion>1.5</compilerVersion>
                <source>1.5</source>
                <target>1.5</target>
                <verbose>true</verbose>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
              ...
</profiles>

и это не работает...

Я даже пытался переопределить конфигурацию в обычных разделах плагина моего POM (я имею в виду, не для определенного профиля, а для всего моего POM).

В чем может быть проблема?

Чтобы уточнить некоторые из моих требований:

  • Я не хочу избавляться от родительского POM и профиля (wls7), определенного внутри него (поскольку мне нужно много-много свойств, конфигураций,...), и это не процесс в моей компании.
  • Решение, основанное на дублировании родительского POM и / или профиля, определенного внутри него, не является хорошим. Так как, если ответственность за
    родитель POM что-то изменить, я
    должен был бы сообщить об этом в моем.

Это просто вопрос наследования (расширение или переопределение профиля, конфигурации из POM верхнего уровня), поэтому я думаю, что это должно быть возможно с Maven 2.

3 ответа

Переопределение конфигурации из родительского pom может быть сделано путем добавления combine.self="override" приписать элемент в вашем пом.

Попробуйте изменить конфигурацию вашего плагина на:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <executions>
        <execution>
          <id>my-testCompile</id>
          <phase>test-compile</phase>
          <goals>
            <goal>testCompile</goal>
          </goals>
          <configuration combine.self="override">
            <fork>true</fork>
            <executable>${jdk15.executable}</executable>
            <compilerVersion>1.5</compilerVersion>
            <source>1.5</source>
            <target>1.5</target>
            <verbose>true</verbose>
          </configuration>
        </execution>
      </executions>
    </plugin>

Для получения дополнительной информации о переопределении плагинов см.: http://maven.apache.org/pom.html

Я была такая же проблема. По умолчанию мой плагин Maven War исключил HTML-файл. Но в моем профиле приемочных испытаний я хотел, чтобы этот файл был включен. Поэтому, когда я снова добавил плагин Maven War, он не переопределял значение по умолчанию.

Чтобы решить эту проблему, я передал в атрибут comb.self и работал нормально.

Стандартная сборка:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                <packagingExcludes>swagger-ui/client.html</packagingExcludes>
                </configuration>
            </plugin>

Профиль приемочных испытаний:

<plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.4</version>
                        <configuration combine.self="override"/>
                    </plugin>

Вы пытались деактивировать профиль wls7 (начиная с maven 2.0.10):

Начиная с Maven 2.0.10, один или несколько профилей можно деактивировать с помощью командной строки, добавив к их идентификатору либо символ "!" или '-', как показано ниже:

mvn groupId:artifactId:goal -P !profile-1,!profile-2

Это можно использовать для деактивации профилей, помеченных как activeByDefault, или профилей, которые в противном случае были бы активированы через их конфигурацию активации.

А затем добавьте свою конфигурацию в профиль с другим именем или прямо в pom.xml,

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