Maven: возможно ли переопределить конфигурацию плагина, уже определенного для профиля в родительском 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 верхнего уровня), поэтому я думаю, что это возможно с помощью maven2.
Ответы
Ответ 1
Переопределение конфигураций родительского pom можно сделать, добавив атрибут combine.self="override"
к элементу вашего pom.
Попробуйте изменить конфигурацию вашего плагина:
<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
Ответ 2
У меня была такая же проблема. По умолчанию мой плагин 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>
Ответ 3
Вы пытались деактивировать профиль wls7 (начиная с maven 2.0.10):
Начиная с Maven 2.0.10, один или больше профилей можно деактивировать, используя командной строки, префикс их идентификатор с символом '!' или '-', как показано ниже:
mvn groupId:artifactId:goal -P !profile-1,!profile-2
Это можно использовать для деактивации профили, отмеченные как activeByDefault или профилей, которые в противном случае были бы активируются посредством их активации конфигурации.
Затем добавьте свою конфигурацию в профиль с другим именем или непосредственно в pom.xml
.