Maven에서 부모 플러그인을 자동으로 활성화합니다
-
20-08-2019 - |
문제
부모 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>
그리고 모든 어린이에서 당신은 올바른 목표를 재정의합니다.
이 솔루션 (물론 작동하는 경우)의 문제는 모든 어린이의 플러그인 구성을 재정의해야한다는 것입니다. 그렇지 않으면 실행되지 않습니다.