상위 모듈이 아닌 하위 모듈에서 Maven 플러그인 목표를 실행합니다.
다중 모듈 프로젝트에서 부모 프로젝트가 아닌 모든 하위 모듈에서 플러그인 목표를 실행하도록 지정하려면 어떻게해야합니까? 는 <pluginManagement>
있지만 실행을위한 구성 만 정의합니다. 하위 모듈은 여전히 목표를 실행하기 위해 플러그인을 참조해야합니다.
[...] 그러나 이것은 자식의 plugins 요소 내에서 실제로 참조되는 플러그인 만 구성합니다. ( POM 참조 )
이것을 달성하는 다른 방법이 있습니까?
업데이트 : Pascal의 조언에 따라 이것을 시도했습니다.
<!-- ... -->
<packaging>pom</packaging>
<modules>
<module>child</module>
</modules>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- ... -->
jar
목표가 integration-test
단계에 묶여 있어도 상위 프로젝트에 대한 .jar을 생성합니다 .
기본 수명주기 바인딩
에 따르면
패키징에 대한 바인딩
pom
은 다음과 같습니다.
기본 라이프 사이클 바인딩-pom 패키징
패키지 사이트 : 첨부 설명자 설치 설치 : 설치 배포 배포 : 배포
따라서 부모 POM에
<packaging>pom<packaging>
(주석에서 지적한 것과 같은 경우) 플러그인을 위의 단계가 아닌 다른 단계에 바인딩하는 경우 (전체 목록 은
수명주기 참조 참조 ) 동안 실행되지 않습니다. 부모 POM의 빌드.
(편집 : 내 초기 대답은 틀 렸습니다. 플러그인 목표를 특정 단계에 바인딩 하면 프로젝트 패키징에 관계없이 해당 단계 중에 트리거됩니다. 기본 수명주기 바인딩 은 그와 관련이 없습니다. , 그것들은 단지 기본 라이프 사이클 바인딩입니다. 중요한 것은 플러그인이 바인딩되는 단계가 빌드 라이프 사이클의 일부인 경우입니다 .)
지적했듯이 pluginManagement
플러그인 구성을 위해 부모 pom에서을 사용할 수 있지만 부모가 아닌 자식 모듈에서 플러그인 목표를 실제로 실행하려는 경우 (이를 수행해야 할 이유가 있지만 대부분의 경우 , 플러그인은 pom
내용이없는 패키징이 있는 모듈에 많은 영향 을주지 않습니다 plugins
.) 하위 요소의 플러그인을 참조해야합니다 .
예제에 적용하면 상위 pom.xml은 다음 사양을 정의 할 수 있습니다.
<project>
<packaging>pom</packaging>
...
<modules>
<module>child</module>
</modules>
...
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>my-execution-id</id>
<phase>integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</pluginManagement>
</build>
...
</project>
그리고 모든 어린이에게는 pom.xml
다음 사항 만 필요합니다.
<project>
...
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
...
</build>
</project>
플러그인 관리와 함께 설명 된 솔루션은 확실히 정확하지만 어떤 경우에는 적합하지 않습니다. 실행마다 자체 설정 (구성)으로 구성된 하위 모듈에서 여러 jar : jar 목표를 실행한다고 가정합니다. 또는 일반적으로 자식 poms가 플러그인을 명시 적으로 트리거하도록 강제하지 않으려는 경우.
이 경우 나를 위해 일한 솔루션은 특정 프로필 아래의 부모 pom에서 실행을 정의하고 예를 들어 일부 파일 또는 속성의 존재를 확인하여 자식 poms에서만 활성화되도록하는 것이 었습니다.
<profile>
<id>generate-dc</id>
<activation>
<file>
<exists>src/main/assembly/some.xml</exists>
</file>
</activation>
그런 다음 플러그인은 부모에서 실행되지 않지만 파일이 포함되어 있거나 일부 속성을 설정하면 모든 자식에서 실행됩니다.
부모 POM이 아닌 자식에서 일부 플러그인을 실행하는 비슷한 요구 사항이 있습니다. 나는 <skip>true</skip>
부모 POM 에 진술함으로써 이것을 달성했습니다 .
상위 pom 항목은 다음과 같습니다.
<plugin>
<groupId>eviware</groupId>
<artifactId>maven-soapui-plugin</artifactId>
<version>4.0.0</version>
<inherited>false</inherited>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
</dependency>
</dependencies>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
하위 프로젝트 pom 항목은 다음과 같습니다.
<plugins>
<plugin>
<groupId>eviware</groupId>
<artifactId>maven-soapui-plugin</artifactId>
<version>4.0.0</version>
<configuration>
<settingsFile>site-service-web/src/test/soapui/soapui-settings.xml</settingsFile>
<projectFile>site-service-web/src/test/soapui/PodifiSite-soapui-project.xml</projectFile>
<outputFolder>site-service-web/target/surefire-reports</outputFolder>
<junitReport>true</junitReport>
<exportwAll>true</exportwAll>
<printReport>true</printReport>
</configuration>
</plugin>
</plugins>
이 구성은 나를 위해 일했습니다. 부모 및 자식 pom 모두에 플러그인을 추가하십시오.
부모의 :
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<inherited>true</inherited>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
아이
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<inherited>false</inherited>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
사용 <inherited>false</inherited>
부모 프로젝트의 플러그인 섹션에서.
자세한 내용 은 이 페이지 를 참조하십시오.
Pascal의 답변을 시도했지만 작동하지 않았습니다. 자식 pom에서 참조 된 플러그인이 실행되지 않았습니다. 빌드 단계 바인딩이 없었기 때문이라고 가정합니다.
이 게시물은 플러그인을 실행 ID 및 빌드 단계에 바인딩하여 작동하는 솔루션을 설명합니다. 기본 바인딩을 Maven 플러그인의 단계로 재정의하는 방법
이 작업을 수행하려는 다른 사람에게 권장합니다.
'developer tip' 카테고리의 다른 글
Try Catch 블록을 사용하는 경우 (0) | 2020.12.02 |
---|---|
케 라스에서 재현 가능한 결과를 얻는 방법 (0) | 2020.12.02 |
JAXB : 목록에서 객체를 마샬링하는 방법? (0) | 2020.12.01 |
Facebook이 Android에 설치되어 있는지 확인하는 방법 (0) | 2020.12.01 |
clang ++ / libc ++로 Boost를 컴파일 / 링크하는 방법은 무엇입니까? (0) | 2020.12.01 |