[maven] 부모 POM에 정의 된 Maven 플러그인 비활성화

하위 POM에서 실행하지 않으려는 플러그인을 정의하는 상위 POM을 사용하고 있습니다. 자식 폼에서 플러그인을 완전히 비활성화하려면 어떻게해야합니까?

제약 조건 : 부모 POM 자체를 변경할 수 없습니다.



답변

자식 POM에서 Findbugs를 비활성화 할 때 다음이 작동합니다.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>ID_AS_IN_PARENT</id> <!-- id is necessary sometimes -->
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

참고 : Findbugs 플러그인의 전체 정의는 부모 / 슈퍼 POM에 있으므로 버전 등을 상속받습니다.

Maven 3에서는 다음을 사용해야합니다.

 <configuration>
      <skip>true</skip>
 </configuration>

플러그인.


답변

플러그인에 ‘skip’구성 매개 변수가 있는지 확인하십시오. 거의 다 그렇습니다. 그렇다면 자식의 선언에 추가하십시오.

<plugin>
   <groupId>group</groupId>
   <artifactId>artifact</artifactId>
   <configuration>
     <skip>true</skip>
   </configuration>
</plugin>

그렇지 않은 경우 다음을 사용하십시오.

<plugin>
<groupId>group</groupId>
 <artifactId>artifact</artifactId>
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>
</executions>
</plugin>


답변

스레드는 오래되었지만 여전히 누군가 관심이 있습니다. 내가 찾은 가장 짧은 형태는 λlex와 bmargulies의 예제에서 더 개선 된 것입니다. 실행 태그는 다음과 같습니다.

<execution>
    <id>TheNameOfTheRelevantExecution</id>
    <phase/>
</execution>

강조하고 싶은 2 가지 사항 :

  1. 단계는 ‘없음’보다 덜 해키처럼 보이지만 여전히 해킹은 아닙니다.
  2. id는 재정의하려는 실행과 같아야합니다. 실행을 위해 id를 지정하지 않으면 Maven은 암시 적으로 (직관적으로 직관적으로 예상하지 않는 방식으로) 수행합니다.

게시 한 후에 이미 스택 오버 플로우에 있음을 발견했습니다
.Maven 다중 모듈 프로젝트에서 한 어린이에서 플러그인을 비활성화하려면 어떻게해야합니까?


답변

이 스레드가 실제로 오래되었다는 것을 알고 있지만 @Ivan Bondarenko의 솔루션이 내 상황에서 도움이되었습니다.

나는 내 다음과 같은했다 pom.xml.

<build>
    ...
    <plugins>
         <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <execution>
                        <id>generate-citrus-war</id>
                        <goals>
                            <goal>test-war</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
</build>

내가 원했던 generate-citrus-war것은 특정 프로파일 의 실행을 비활성화하는 것이 었으며 이것이 해결책이었습니다.

<profile>
    <id>it</id>
    <build>
        <plugins>
            <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <!-- disable generating the war for this profile -->
                    <execution>
                        <id>generate-citrus-war</id>
                        <phase/>
                    </execution>

                    <!-- do something else -->
                    <execution>
                        ...
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>


답변