2014-03-12 1 views
1

Agregate 프로젝트 1 :메이븐 프로젝트 집계 및 변수

<groupId>com.mycompany</groupId> 
    <artifactId>builder</artifactId> 
    <version>1.0.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>../module-1</module> 
     <module>../module-2</module> 
    </modules> 
    <properties> 
     <project.parent.pom>../builder-v1/pom.xml</project.parent.pom> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <lib.version>2.5.1</lib.version> 
    </properties> 

Agregate 프로젝트 2 :

<groupId>com.mycompany</groupId> 
    <artifactId>builder</artifactId> 
    <version>1.0.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>../module-1</module> 
     <module>../module-4</module> 
     <module>../module-6</module> 
    </modules> 
    <properties> 
     <project.parent.pom>../builder-v2/pom.xml</project.parent.pom> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <lib.version>2.6.0</lib.version> 
    </properties> 

모듈 1 : 집계 치어에서 변수

<parent> 
     <groupId>com.mycompany</groupId> 
     <artifactId>builder</artifactId> 
     <version>1.0.0</version> 
     <relativePath>../builder-v1/pom.xml</relativePath> 
     <!--<relativePath>${project.parent.pom}</relativePath> not work--> 
    </parent> 

    <groupId>com.mycompany</groupId> 
    <artifactId>module-1</artifactId> 

섹션 relativepath를하지

작업
<relativePath>../builder-v1/pom.xml</relativePath> 
<!--<relativePath>${project.parent.pom}</relativePath> not work--> 

하지만 집계 프로젝트에서 다른 $ {lib.version}이 필요합니다. 내가 모듈 1에서 상속 부분을 삭제하는 경우 :

<!--<parent> 
     <groupId>com.mycompany</groupId> 
     <artifactId>builder</artifactId> 
     <version>1.0.0</version> 
     <relativePath>../builder-v1/pom.xml</relativePath> 
    </parent>--> 

    <groupId>com.mycompany</groupId> 
    <artifactId>module-1</artifactId> 

변수는 하위 모듈에 전달되지 않습니다와 나는 오류가 발생했습니다 :

'dependencies.dependency.version' for com.somelib:some-lib:jar must be a valid version but is '${lib.version}'. 

가 어떻게 모듈로 집계 프로젝트 및 전송 변수를 구성 할 수 있습니까?

<parent> 
     <groupId>com.mycompany</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0.0</version> 
    </parent> 

    <groupId>com.mycompany</groupId> 
    <artifactId>module-1</artifactId> 

Agregate 프로젝트 1 : 1

<groupId>com.mycompany</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0.0</version> 
    <packaging>pom</packaging> 

    <profiles> 
     <profile> 
     <id>v1</id> 
      <activation> 
       <property> 
        <name>project.type</name> 
        <value>v1</value> 
       </property> 
      </activation> 
     <properties> 
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    
      <lib.version>2.5.1</lib.version> 
     </properties> 
     </profile> 
     ... 
    </profiles> 

모듈 : @Gab와

UPDATE는

부모 치어를 코멘트

<groupId>com.mycompany</groupId> 
    <artifactId>builder-v1</artifactId> 
    <version>1.0.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>../module-1</module> 
     <module>../module-2</module> 
    </modules> 
나는 당신의 질문을 이해하면
mvn clean package --file=pom_v1.xml -Dproject.type=v1 -Dproject.main.module=module-1 

답변

0

은 $ {lib.version}에 대해 서로 다른 값을 정의하는 2 개의 프로파일이있는 공통 상위를 정의하고 "집계"폼에서 하나의 프로파일을 자동으로 활성화 할 수 있습니다. 모든 모듈은 부모로부터 상속 한

parent-pom (defining 2 different profiles) 
| 
+ aggregate 1 (inherit from parent-pom - activate profile 1) 
| | 
| + module 1 (inherit from parent-pom) 
    | 
| + module 2 (inherit from parent-pom) 
+ aggregate 2 (inherit from parent-pom - activate profile 2) 
    | 
    + module 1 (inherit from parent-pom) 
    | 
    + module 3 (inherit from parent-pom) 
은 [편집] 자동으로 받는다는 명령에 속성을 지정 피하기 위해 "집계"리딩에 하나 개의 프로파일을 활성화 할 수있는 유일한 트릭 보인다는

입니다

<activation> 
    <file> 
    <exists>relative_path_of_file_specific_to_project</exists> 
    </file> 
</activation> 

속성 기반 활성화는 시스템 속성 (pom에 정의 된 속성 제외)에서만 작동하며 상속 된 프로필 구성 (기본적으로 활성화 됨)을 재정의 할 수 없기 때문에 가능합니다.

+0

도움이 되셨습니다. 감사합니다. 근무한 구성을 찾았습니다. 공통 부모 인 pom에서 2 개의 프로필을 만들고 속성을 설정합니다. 속성별로 프로필을 활성화하십시오. mvn을 실행할 때 속성 설정 : mvn clean 패키지 -DsomeProperty = v1 –

+0

> maven 명령에서 속성을 지정할 필요가 없습니다. 프로젝트 pom의 설정을 사용할 수 없습니다 : 인식 할 수없는 태그 : 'settings', 우리는 설정. 내가하려고하는 것이 아닙니다. conf라는 두 개의 autobuilding 집계 프로젝트를 시도하고 maven 명령으로 활성화하는이 작업 –

+0

설정을 놓쳤습니다.) – Gab

0

잘, 당신은 당신의 모듈이 여러 부모를 갖고 싶어 : 빌더-V1 목표를 실행프로필을 project.type = V1을 활성화합니다. 이건 불가능 해. 이 discussion을 참조하십시오.

@ Gab을 제안 해 볼 수 있습니다. 본질적으로 두 개의 profiles을 정의하십시오. 하나는 빌더 -v1 용이고 다른 하나는 빌더 -v2 용입니다. 다른 모듈 세트와 다른 특성/버전 지정을 포함하여 프로파일 내부의 모든 것을 할 수 있습니다.

+0

모든 모듈에 대해 공통 상위를 사용하지만 두 개의 집계 프로젝트로 하이어를 만드는 것이 좋습니까? –