2011-01-13 5 views
27

일반적인 개발 빌드에서 특정 단계를 건너 뛰도록 (즉, * -source.jar 파일을 빌드하지 않음) 큰 프로젝트의 maven 빌드를 수정해야합니다. 나는 maven에 대해 "조건부 실행"을 검색했지만 아무 것도 찾지 못했습니다.Maven 프로파일을 사용하여 빌드 실행 제어

개발자 프로필은 직관적 인 방법으로 들리지만 직관적 인 방법이 무엇인지 모릅니다. 프로필 용 문서는 서로 다른 프로필 (예 : 데이터베이스 연결 매개 변수)을 서로 다른 프로필에 설정하는 방법을 보여줍니다. 속성을 설정 한 다음 해당 속성이 maven-source-plugin - execution - execution 태그에 설정되어 있는지 테스트 할 수 있습니다.

이것은 maven에서 조건부 실행을 수행하는 올바른 방법입니까?

maven에서이 작업을 수행하는 "올바른"방법은 무엇입니까?

답변

33

당신은 약간 뒤로 생각하고 있습니다 : 프로파일을 사용하여 동작을 활성화하고 비활성화하지 마십시오. 이것은 프로파일이 가장 잘 맞는 것일 뿐이며, 정확하게 상황에 맞는 단계 만 실행하면됩니다. 그래서 당신과 같이있을 수 있습니다 :

<profile> 
    <id>source-jars</id> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-source-plugin</artifactId> 
     ... 

을 그리고 사실 단지 maven-source-plugin usage page에서이 같은 예제가있다. 이슈를 생성해야 할 때 mvn -P source-jars (또는 무엇이든)를 사용하십시오. 그게 다야! 릴리스시에만이 작업을 수행해야하는 경우 release plugin은 릴리스 플러그인 구성에서 사용할 프로파일을 정의하는 방법을 제공합니다.

+0

paven은 maven-source-plugin이 기본적으로 실행되는 곳에서 작성되므로 사용자가 제안한대로 재구성해야합니다. –

+3

프로필을 사용하여 플러그인을 기본적으로 설정하고 사용하지 않는 것이 바람직한 경우가 많습니다. 나는이 해답이 그것을 해결하지 않고 문제를 피한다고 생각한다. – Kevin

+1

@Mowgli 그러나 Maven 프로파일 시스템은 그다지 적합하지 않습니다. "활성화"메커니즘 만 있고 "비활성화"메커니즘은 없습니다. 일부 플러그인은 자체적으로 비활성화 메커니즘을 구축하여이 문제를 해결합니다 (예 : surefire 플러그인 용 skipTests). –

6

기본적으로 POM에 두 개의 프로파일을 추가하여 source-jars 플러그인을 사용하도록 실제 목표를 달성 할 수 있습니다. 당신이 activation 섹션에 요소 <activeByDefault>true</activeByDefault>를 추가하고 모든 빌드에 대해 같은 POM의 다른 프로파일이 이전에 설명한 방법 중 하나를 사용하여 활성화되어 있지 않으면

이 프로필이 자동으로 활성화됩니다한다고 할 수 Maven profiles documentation 노트

따라서 두 프로파일을 관련 플러그인을 포함하는 activeByDefault이고 다른 하나는 표준 방법으로 활성화 할 수 있습니다 (예 : -P : 명령 줄에서 -P). 프로필 실행 중. 당신의 pom.xml (또는 메이븐 설정 또는 무엇이든)의 profiles 섹션 따라서 다음과 같습니다

<profile> 
    <id>source-jars</id> 
    <activation> 
    <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-source-plugin</artifactId> 
     ... 
     </plugin> 
    </plugins> 
    </build> 
</profile> 
<profile> 
    <!-- active this profile to disable the source-jars plugin --> 
    <id>no-optional-plugins</id> 
</profile> 

불행히도,이 방법은 여러 플러그인을 제어하기위한 잘 확장 할 수있는 방법을 볼 수 없습니다 - 당신이 필요가 있다고 생각 O(n^2)에 대한 프로필은 n 개이지만이 간단한 경우에는 정상적으로 작동합니다.

메이븐 ≥ 2.0.10 또 다른 가능성 간단한 옵션은 위의 (아직 activeByDefault)에서 source-jars 프로파일을 가지고 있으며, manually deactivate the profile 당신은 -P CLI 플래그 후 - 또는 !와 프로필 ID를 접두어로 할 때 :

$ mvn -P !source-jars 

이 방법은 여러 플러그인에서 동일한 O(n^2) 문제가 없지만 시스템 속성, 환경 변수, JDK 버전 등으로 인해 비활성화가 트리거 될 수 없으므로 유연성이 떨어집니다.

+0

감사합니다,이 예제는 당신이 정말로 나를 도와주었습니다. – Hoto

관련 문제