문제

부모 POM에 플러그인을 정의하는 플러그인을 비활성화 할 수 있습니까? 어린이 가이 플러그인을 물려 받으면 자동으로 활성화됩니다.

도움이 되었습니까?

해결책

부모님 POM의 플러그인을 구성하고 싶지만 상속 된 프로젝트에서만 사용합니다. Maven에는이 섹션이있는 섹션이 있습니다 - 플러그인 관리에서 플러그인을 구성하지만 필요할 때 위상에 바인딩하십시오. 예를 들어 플러그인 관리에서 위상 태그를 생략하지만 상속 된 POM 아래에 지정하십시오.

다른 팁

따라서 'Siddhadev'는 정확히 맞습니다. 주어진 ID로 부모 POM의 플러그인 구성을 정의 할 수 있습니다.

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>child-caller</id>
                        <!-- 'phase' omitted -->
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo message="called from child!" />
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

그리고 Child Pom에서는 이것이 다음 단계를 명시 적으로 나열 할 수 있습니다.

<build>
    <plugins>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>child-caller</id>
                    <phase>compile</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

다양한 JRE를 타겟팅하는 데 사용했습니다. 불행히도, 다른 대상 디렉토리 (플러그인의 버그를 고려)와 함께 Maven-Compiler-Plugin을 사용할 수 없으므로 Ant를 사용해야합니다.

이것은 정확히 당신이 따르는 것이 아니지만, 나는 그것이 당신에게 충분히 잘 작동 할 것이라고 생각합니다.

부모의 플러그인 관리 태그에 플러그인을 선언하면 해당 플러그인을 선언하는 모든 어린이 프로젝트에 의해 구성이 상속됩니다.

예를 들어, 상위에서는 컴파일 플러그인이 테스트 컴파일에 Java 5를 사용한다고 선언합니다.

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <executions>
        <execution>
          <id>test-compile</id>
          <goals>
            <goal>testCompile</goal>
          </goals>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</pluginManagement>

그런 다음 어린이의 경우 컴파일러 플러그인을 간단하게 선언하면 부모의 구성이 상속됩니다.

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
    </plugin>
  </plugins>
</build>

최상위 POM에서 플러그인을 선언하고 건너 뛰라고 말한 다음 어린이 수준에서 건너 뛰지 않도록 지시 할 수 있습니다. 그것은 자동적이지는 않지만 재정의 표현에서는 매우 적습니다.

Parent Pom, 플러그인을 비활성화하지만 모든 구성을 선언합니다.

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>true</skip>
        ...lots more config...
        ...lots more config...
        ...lots more config...
    </configuration>
</plugin>

Child Pom, 플러그인 활성화 :

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>

나는 다음 해결책을 가지고 갔다.

  • 플러그인 관리 섹션에서 Parent-Pom에서 플러그인을 구성하십시오. 플러그인을 기존 단계에 바인딩하십시오.

  • 부모 POM에 대한 플러그인을 비 존재하는 단계에 바인딩하여 플러그인을 비활성화하십시오. 플러그인 섹션에서 위상을 대체하십시오.

  • 플러그인 섹션에 플러그인을 포함하여 각 어린이 폴의 플러그인을 활성화하십시오.

예를 들어 Parent-Pom :

<defaultGoal>install</defaultGoal>
    <pluginManagement>
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <executions>
                    <execution>
                        <id>install-ejb-client</id>
                        <phase>install</phase>
                        <goals>
                        <goal>install-file</goal>
                        </goals>
                        <configuration>
                            <file>${ejb-client-file}</file>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>${project.artifactId}</artifactId>
                            <version>${project.version}</version>
                            <packaging>jar</packaging>
                            <classifier>client</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
                    ...                 
        </plugins>
    </pluginManagement>
    <plugins>
            <plugin>
                <!-- deactivate the plugin for this project, only child-projects do generate ejb-clients -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <inherited>false</inherited>
                <executions>
                    <execution>
                        <id>install-ejb-client</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
            ...
    </plugins>
</build>

예제 Child-Pom :

<build>
    <plugins>
            ...
        <plugin>
            <!-- Install the generated client-jar. Property 'ejb-client-file' has to be set! Plugin configuration is in the parent pom -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
        </plugin>       
            ... 
    </plugins>
</build>

내가 아는 한, 이것에 대한 일반적인 솔루션은 없습니다. 적어도 지금은 ...

한 가지 아이디어 (나는 그것을 시도하지 않았지만 효과가있을 수 있음)는 Parent Pom.xml에서 존재하지 않는 실행 목표를 정의하는 것입니다.

<executions>
    <execution>
        <goals>
            <goal>noGoal</goal>
        </goals>
    </execution>
</executions>

그리고 모든 어린이에서 당신은 올바른 목표를 재정의합니다.

이 솔루션 (물론 작동하는 경우)의 문제는 모든 어린이의 플러그인 구성을 재정의해야한다는 것입니다. 그렇지 않으면 실행되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top