[maven-2] 상위 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>

그러나 내 프로젝트에서는 테스트 클래스를 컴파일하는 데 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.


답변