2013-03-26 3 views
4

Maven 3.0.4 사용.메이븐 3 : "루트"기업 버전에 액세스 POM

저는 회사 조직의 POM을 제공해야 할 의무가 있습니다. 저희 팀은이 POM을 사용할 때 개발자가 가지고있는 질문이나 문제에 대한 지원을 제공 할 것입니다. 종종 빌드 로그를 지원 티켓에 첨부합니다. 따라서 회사 POM에서 회사 상위 버전을 모든 빌드로 콘솔에 반향시키고 싶습니다. 나는 이것을 위해 antrun 플러그인을 사용하고있다.

<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-antrun-plugin</artifactId> 
<executions> 
    <execution> 
    <id>echo-build-environment</id> 
    <phase>validate</phase> 
    <goals><goal>run</goal></goals> 
    <configuration> 
     <target> 
     <echo level="info" message="Maven ${maven.version}" taskname="Version" /> 
     <echo level="info" message="Corporate POMs ${want.the.version.here}" taskname="Version" /> 
     .... 
    </target> 

트릭 내가 POM 상속의 많은 "수준"기업 부모와 빌드에 사용 된 POM 사이에 올 수있는 방법을 모를 것이다. 이 같은

corporate-parent 
    team-parent 
    application-parent 
     child-module 

또는 간단 :

corporate-parent 
    a-simple-library 

나는 현재 (자식) 프로젝트의 버전이 될 것 같은 ${project.version} 에코 할 수없는 우리는이 같은 상속 구조 뭔가를 할 수있다. 얼마나 많은 상속 수준이 있을지 모르기 때문에 ${project.parent.version}을 사용할 수 없습니다. 나는 기업 POM 버전에 하드 코드 된 <corporate.pom.version> 속성을 정의하려고 시도했다. 그러나 회사 POM을 릴리스 할 때 릴리즈 플러그인은 해당 속성을 업데이트하지 못한다. (이는 의미가있다. 종속 버전이 아니라 단지 속성 일 뿐이다. 버전은 그것을 알 수 없습니다).

이상적으로는 ${some.groupId.corporate-parent.version}과 같은 속성을 통해 특정 POM 버전을 직접 얻을 수 있기를 바랍니다. 존재하는 것과 비슷한 것이 있습니까?

그렇지 않은 경우 릴리스되는 프로젝트의 releaseVersion으로 POM 속성을 업데이트하는 방법이 있습니까?

각 릴리스 전에 수동으로 속성을 편집하는 무차별 방식으로 되돌릴 수 있습니다. 저의 팀원들은 그런 접근 방식을 고맙게 생각합니다.

언뜻보기에는 어려운 것 같지 않은 작업을 수행하기 위해 사용자 정의 플러그인을 작성할 필요가 없기를 희망합니다. 설치 파일을 사용하여, maven-install-pluginmaven-deploy-plugin 및 파일을 배포 - 당신의 pom.xml 의 필터링 된 버전을 생성하는 maven-resources-plugin - : 두 플러그인의 조합을 사용하여 설치/배포 POM의 특성 확장을 달성 할 수

답변

2

동안 트리거 될 수 있습니다. 간단한 POM 계층 탐색에 필요한 정보를 얻을 수 있습니다.

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>groovy-maven-plugin</artifactId> 
    <version>2.0</version> 
    <executions> 
     <execution> 
      <id>echo-build-environment</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <source> 
       <![CDATA[ 
       def rootPom = project; 
       while (rootPom.parent != null) { 
        rootPom = rootPom.parent; 
       } 

       project.properties.setProperty('root.pom.version', 
               rootPom.version);        
       log.info("  Maven Home: " + project.properties['maven.home']); 
       log.info("  Java Home: " + project.properties['java.home']); 
       log.info(" Built By User: " + project.properties['user.name']); 
       log.info("Corp POM Version: " + rootPom.version); 
       ]]> 
       </source> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

부분은 계산 된 속성을 저장하므로 하위 POM에서 액세스 할 수 있습니다. 아이디어에 대한

[INFO]  Maven Home: c:\dev\maven\apache-maven-3.0.4 
[INFO]  Java Home: c:\Program Files\Java\jdk1.7.0_13\jre 
[INFO] Built By User: user944849 
[INFO] Corp POM Version: 0.26-SNAPSHOT 
0

mojos를 사용하여 필터링 된 POM을 설치/배포합니다.

이 과정은 예를 들어 내가 maven-antrun-plugin 사용을 중단하고 대신 GMaven로 전환 릴리 과정

+0

감사합니다, 나는 조금 탐구해야합니다 :

결과 로그는 것 같습니다. POM에는 필터링 프로세스에 의해 변경되지 않고 유지되어야하는 많은 다른 속성이 있습니다. 설치와 배포는'release : perform'의 일부로 이미 발생합니다. – user944849

+0

나는'@ {프로젝트.버전}'release의 tagNameFormat 요소에 사용 : prepare & this가 작동하지 않습니다. 몇 가지 쟁점 : 릴리스 플러그인은''요소 (소스 코드 확인)를 필터링하지 않으며, POM 자체가 공개되는 동안 필터하기가 어렵습니다. 그래도 감사합니다! – user944849

+0

정확히 작동합니까? 플러그인이 아닌 3 개가 아닌가? – stackexchanger