내 프로젝트의 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>
그러나 내 프로젝트에서는 테스트 클래스를 컴파일하는 데 jdk4 대신 jdk5를 사용하기 위해 maven-compiler-plugin의 구성을 재정의하고 싶습니다.
이것이 내 프로젝트의 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에서 가능해야한다고 생각합니다.
답변
부모 pom에서 구성을 재정의하는 것은 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 플러그인을 다시 추가했을 때 기본값을 재정의하지 않았습니다.
이 문제를 해결하기 위해 combine.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
.