5

내 maven 빌드에 gitflow-helper-maven-plugin 확장자를 사용하려고합니다.빌드 된 버전이 -SNAPSHOT이 아닌 경우 maven 프로필을 활성화하는 방법?

그러므로 내가 릴리스 버전을 구축하고 스냅 샷을 컴파일하는 동안을 건너 뛰는 경우 몇 가지 추가 단계를 실행하기 위해 내 프로젝트를 구성하고 싶습니다,하지만 난 ${project.version}-SNAPSHOT가 포함되어있는 경우 프로파일을 가능하게 할 수있는 방법을 찾을 수 없습니다.

의견이 있으십니까?

+0

은 '건너 뛰기'옵션이있는 플러그인에 관한 추가 단계입니까? –

+0

이제 추가 단계는 maven-source-plugin과 maven-javadoc-plugin입니다. – conteit86

답변

8

:

  • 사용을 buid-helper-maven-plugin 기본 ${project.version} property and create a new $를 {구문 분석의 regex-property 목표 만 .when.is.snapshot.used} 값이 true이거나 ${project.version} 인 경우 SNAPSHOT 접미사를 찾았습니다.
  • 구성은 maven-source-plugin 위와 같이 maven-javadoc-plugin에 대해 같은이 실행
  • 구성을 그 skipSource 옵션을 사용하고 여기에 새로운 (동적) ${only.when.is.snapshot.used} property: in case of snapshot it will have value 사실 hence skip the execution, otherwise will have value ${project.version} which will be used as FALSE '를 전달하고, 따라서 건너 뛸 수없는 특별한 구성의 jar 목표를 실행합니다 그 skip 옵션

를 사용하는 방법의 예제는 위의 것 :

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
     <execution> 
      <!-- sets the only.when.is.snapshot.used property to true if SNAPSHOT was used, 
       to the project version otherwise --> 
      <id>build-helper-regex-is-snapshot-used</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>regex-property</goal> 
      </goals> 
      <configuration> 
       <name>only.when.is.snapshot.used</name> 
       <value>${project.version}</value> 
       <regex>.*-SNAPSHOT</regex> 
       <replacement>true</replacement> 
       <failIfNoMatch>false</failIfNoMatch> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-source-plugin</artifactId> 
    <version>3.0.1</version> 
    <executions> 
     <execution> 
      <id>create-sources</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <!-- skip when version is SNAPSHOT --> 
       <skipSource>${only.when.is.snapshot.used}</skipSource> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <version>2.10.4</version> 
    <executions> 
     <execution> 
      <id>create-javadoc</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <!-- skip when version is SNAPSHOT --> 
       <skip>${only.when.is.snapshot.used}</skip> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

즉, 프로필이 필요 없습니다.이 구성은 SNAPSHOT이 아닌 버전을 동적으로 사용하고 추가 구성 (명령 줄 옵션 또는 기타)을 사용하지 않을 경우에만 활성화됩니다.


측면 말씀 드리지만, 당신은 또한 효과적으로 소스와 javadoc의 플러그인을 호출하는 maven-release-plugin에서 볼 수있는 경우에만 performing 위의 접근 방식의 추가 (작은) 복잡하지 않고 릴리스.

그렇지 않으면 할 수 간단한 사용 실제로 같은, 소스와 javadoc의 플러그인을 호출 할 것이며, true 가치를 재산 performRelease 설정을 통해 활성화 할 수 이는 Maven Super POM에서 나오는 기본 프로필. 하지만이 방법은해야,

mvn clean package -DperformRelease=true 

또는

mvn clean package -Prelease-profile 

그리고 당신은 자동으로 기본 슈퍼 프로필에서 혜택을 생성 된 소스와 javadoc는 단지이있을 것이다 : 즉, 다음과 같은 호출 할 수있는 Maven 프로젝트에,이다 이후 릴리스에서는 프로파일을 super pom에서 삭제할 수 있으므로 마지막 옵션으로 사용하십시오.

+0

환상적인 응답 : https://plus.google.com/112346331375070267873/posts/AntD8wE1F3b?hl=es – albfan

0

다른 해결책을 제안합니다.

버전에서 프로필 활성화를 결정하지 않고 왜 프로필에 버전을 설정하지 않으시겠습니까? 여기처럼 : 당신은 항상 메이븐 빌드의 if 문 시뮬레이션 할 수있는 방법입니다 가능한 방법 아래

<version>${projectVersion}</version> 

<profiles> 
    <profile> 
     <id>snapshot</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <projectVersion>1.0-SNAPSHOT</projectVersion> 
     </properties> 
    </profile> 
    <profile> 
     <id>release</id> 
     <properties> 
      <projectVersion>1.0-RELEASE</projectVersion> 
     </properties> 
    </profile> 
</profiles> 
+1

gitflow-helper-maven-plugin은 프로젝트를 빌드하기 위해 CI 서버 (mvn clean deploy를 트리거)에서 단일 작업을 사용하는 것입니다. 아티팩트를 컴파일하는 지점에 따라 스냅 샷에 배치되고 저장소를 준비하거나 해제합니다. 버전은 새 분기를 만들 때 버전 : 목표를 사용하여 관리됩니다. – conteit86

+0

이 시나리오에서는 특정 프로필을 활성화 할 수 없어 솔루션을 사용할 수 없습니다. – conteit86