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


158

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

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

답변:


205

자식 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>

플러그인.


8
이것은 "정확한"반면, 작동하지만 지정되지 않은 (또는 적어도 문서화되지 않은 ) 기능 이라는 점에 유의해야 합니다. '없음'이라는 공식 단계는 없습니다. 따라서 'foo'를 넣을 수도 있습니다.
Marcel Stör

1
Maven 3에서 저에게는 이것이 작동하지 않습니다. bmargulies와 같이 <skip> true </ skip>는 제안 된 작품
mibutec

10
<id>…</id>부모 POM 의 일부 를 추가 해야했는데 그것은 나를 위해 일했습니다.
mirabilos

4
Maven 3 솔루션은 실제로 플러그인을 비활성화하지 않습니다. 출력에 따르면 플러그인은 여전히 ​​실행됩니다. 그런 다음 건너 뛰기 구성을 존중하는지 여부와 건너 뛰기 방법 / 내용은 개별 플러그인에 달려 있습니다.
Zero3

10
mirabilos의 의견은 Maven 3에 대한 올바른 솔루션이며 모든 플러그인에서 이식 가능합니다. 모든 플러그인에 <skip>매개 변수 가있는 것은 아닙니다 .
길리

60

플러그인에 '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>

작업중 인 플러그인의 이름을 지정하고 help : effective-pom을 실행하여 실제로 실행이 올바른지 확인하십시오.
bmargulies

1
플러그인과 pluginManagement도 살펴보십시오. 후자는 전자보다 우선합니다.
bmargulies

Cobertura 플러그인을 사용하고 있으며 자식 폼에서 실행하고 싶지 않습니다.
tobiasbayer

체크 목표는 2.5로 건너 뜁니다. 전에는 아니었다. cobertura의 목표는 그렇지 않습니다.
bmargulies

확인 만 건너 뛰고 전체 플러그인 실행을 건너 뛰고 싶지 않습니다.
tobiasbayer

37

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

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

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

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

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


1
기록 : 기본 실행 ID는이 답변에 제시된 간단한 규칙을 따릅니다. stackoverflow.com/a/34599117/7641
Jens Bannmann

2
이 솔루션 은 플러그인 별 "건너 뛰기"옵션에 의존하는 대신 실제로 (실행 요청에 따라) 주어진 플러그인에 대해 플러그인을 비활성화합니다 .
Zero3

3

이 스레드가 실제로 오래되었다는 것을 알고 있지만 @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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.