2010-08-16 1 views
2

의 저장소에서 받는다는 모듈을 가져 오기 : 어떻게 든 지정할 수 있습니다내가 가진 부모 프로젝트가 대신 상대 파일 경로

<parent> 
    <groupId>com.cc</groupId> 
    <artifactId>parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

<modules> 
    <module>../module1</module> 
    <module>../module2</module> 
    <module>../module3</module> 
</modules> 

과 모듈을 그에서 더 SRC가없는 경우 ../module2/리포지토리에서 해당 모듈을로드하는 대신 Caused by: java.io.FileNotFoundException: C:\work\temp\wid7\workspace\module2 (The system cannot find the file specified.)으로 실패합니까?

답변

3

프로필을 통해 문제를 해결할 수 있습니다.

<profiles> 
    <profile> 
     <id>module1</id> 
     <activation> 
      <file> 
       <exists>../module1/pom.xml</exists> 
      </file> 
     </activation> 
     <modules> 
      <module>../module1</module> 
     </modules> 
    </profile> 

    <profile> 
     <id>module2</id> 
     <activation> 
      <file> 
       <exists>../module2/pom.xml</exists> 
      </file> 
     </activation> 
     <modules> 
      <module>../module2</module> 
     </modules> 
    </profile> 
    ... 
</profiles> 

프로필은 모듈을 하나의 블록으로 연결합니다. 그래서 다른 모듈은 저장소에서 가져 왔습니다.

+1

여기에서 저장소 사용은 어디에 있습니까? –

3

ArchCC가 귀하의 문제에 an acceptible workaround을 제공했지만, 가장 큰 문제는 모듈 개념을 오해하고 있다는 것입니다.

모듈은 런타임 종속성이 아니며 (일반적으로 종속성으로 참조되지 않으면 일반적으로 이해가되지 않지만) 런타임 종속성이 아닙니다. 다중 모듈 프로젝트를 사용하면 공통 구성을 사용하여 한 단계로 복잡한 빌드를 수행 할 수 있습니다. 빌드가 발생하면 배치 된 pom의 <modules> 블록은 아무런 의미가 없기 때문에 모듈이없는 경우 모듈을 지정하는 것이 절대적으로 의미가 없습니다.

프로젝트의 일부분 만 빌드하려는 경우, 해결 방법은 고급 원자로 명령을 사용하는 것입니다. (현재 트리에) 모든 종속성

mvn -am -pl api,client/impl 

빌드 모듈 API와 클라이언트/IMPL (중첩 된 모듈은 또한 여기서 일)

mvn -amd -pl core 
:

usage: mvn [options] [<goal(s)>] [<phase(s)>] 

Options: 
-am,--also-make      If project list is specified, also 
             build projects required by the 
             list 
-amd,--also-make-dependents   If project list is specified, also 
             build projects that depend on 
             projects on the list 
-pl,--projects <arg>     Build specified reactor projects 
             instead of all projects 
-rf,--resume-from <arg>    Resume reactor from specified 

예 : 여기 mvn --help에서 발췌입니다

빌드 모듈 코어 및이를 종속품으로 참조하는 모든 모듈

mvn -rf my/deep/nested/module 

지정된 모듈에서 원자로 빌드를 재개하십시오 (시나리오 : 25 번째 모듈의 단위 테스트로 인해 실패한 거대한 빌드가 있음). 그래서 당신은 테스트를 수정하고) 재 구축 이전의 모든 모듈의 시간을 절약, 당신이 어디에서


편집을 계속 : 난 그냥 당신의 모듈은 루트 디렉토리 외부에있는 것을 알고 있습니다. 내 의견으로는, 그것은 위에 명시된 원자로 기능을 깨뜨리기 때문에 그것은 maven 모듈 개념에 위배된다.

+0

모듈의 평면 구조가 원자로 기능을 손상시키지 않습니다. http://maven.apache.org/plugins/maven-eclipse-plugin/reactor.html 평면 프로젝트 레이아웃 섹션. 하지만 Release 플러그인에서는 지원하지 않습니다. 모듈의 이데올로기에 대해 이해하고 있지만, 모듈을 절반 만 변경해야 할 경우, 모든 로직을 리빌드 할 필요가 없으며 리포지토리에서 체크 아웃 할 논리도 없습니다. 반응기에 대한 확장 옵션이 문제의 절반에 도움이되지만 너무 이상적인 솔루션을 찾으려고하는 것 같습니다. = ( – ArchCC