2012-01-29 3 views
1

이것은 귀 프로젝트의 단순한 예이며, 부모 pom은 EAR, EJB 및 Jar를 집계합니다.Jenkins and maven multi module 프로젝트에 누락 된 파일이 있습니다.

I는 Maven 프로젝트에서이 구조 SVN 저장 가지고

parent/ 
|- pom.xml 
|- modulA/ 
| |- pom.xml 
|- modulB/ 
| |- pom.xml 

modulB는 모듈라

의 의존성이 pom.xml 파일을 모듈 부

<modules> 
    <module>modulA</module> 
    <module>modulB</module> 
</modules> 

및 종속성 관리 섹션

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>group</groupId> 
      <artifactId>modulA</artifactId> 
      <version>0.0.2-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>group</groupId> 
      <artifactId>modulB</artifactId> 
      <version>0.0.2-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
나는 (창)

mvn clean compile 

내가 어떤 문제가 발생하지 않습니다 받는다는 2.2.1에 처음으로 컴파일 할 때 0

하위 모듈은 내 PC에 부모

<parent> 
    <groupId>group</groupId> 
    <artifactId>parent</artifactId> 
    <version>0.0.2-SNAPSHOT</version> 
    <relativePath>..</relativePath> 
</parent> 

를 참조

하지만 .... 젠킨스는 처음으로 컴파일하려고 (메이븐 2.2.1 리눅스 레드햇)

Missing: 
---------- 
1) modulA:jar:0.0.2-SNAPSHOT 

    Try downloading the file manually from the project website. 

    Then, install it using the command: 
     mvn install:install-file -DgroupId=group -DartifactId=modulA -Dversion=0.0.2- SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file 

    Alternatively, if you host your own repository you can deploy the file there: 
     mvn deploy:deploy-file -DgroupId=group -DartifactId=modulA -Dversion=0.0.2-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id] 

    Path to dependency: 
     1) modulB:ejb:0.0.2-SNAPSHOT 
2) modulA:jar:0.0.2-SNAPSHOT 


    ---------- 
    1 required artifacts are missing. 

왜 ????????

내 PC에서 Artifactory로 프로젝트를 배포하면 Jenkins가 저장소에서 이슈를 다운로드하기 때문에 Jenkins는 문제가 없습니다. 그러나 Jenkins는 왜 저장소의 아티팩트에 의존합니까? 사전에

:(

감사

편집 : 나는 dependencyManagement 섹션은 종속성을 "정의",하지만 생각

서브 모듈은 의존성 종속성을 사용하지 않는 경우 하위 모듈에 추가되지 않았습니다. dependencyManagement 섹션을 삭제하고 Jenkins의 문제가 계속 발생합니다.

내 PC에서 작동합니다. 아웃 문제.

+1

모듈 중 하나에 대해 효과적인 POM을 얻을 수 있습니까? 로컬에서 작동하는 경우 문제가 발생하기 전에 빌드의 일부로 로컬 저장소에 배포 된 아티팩트가 새 시스템 (예 : 빌드 시스템)에서 빌드하려고 시도 할 때까지 효과적으로 숨길 수 있습니다. – chrisbunney

+0

상자에서 로컬 Maven 저장소를 지우는 경우 처음 빌드가 실패합니까? 나는 네가 추측하고있다. 만약 그렇다면, 빌드하기 전에 modulA-0.0.2-SNAPSHOT.jar을 참조하기 만하면된다. 부모님과 모듈 친구들을 더 보지 않고 무엇을 말하는지 말하기 어렵습니다. – BenjaminLinus

답변

0

위의 종속성 관리 섹션이 상위 pom 내부에 있기를 바랍니다. 요구 사항에 따라 modulB에는 modulA의 종속성이 있습니다. 그래서 부모 BOM 대신 모듈 B에 의존성을 포함시키는 것이 좋습니다. 처음으로 실행될 때 Maven은 부모 pom에서 언급 했으므로 두 가지 종속성 모두를 찾고 있다고 생각합니다. 프로젝트 빌드 순서를보세요. 먼저 모듈 A와 B를 빌드합니다. 귀하의 경우에는 moduleA의 pom 파일에 다른 모든 종속성을 포함시키고 일단 빌드하면 jar 파일을 m2 저장소에 배치합니다. 그리고 moduleB가 빌드되기 시작합니다. 의존성이 이미 m2 저장소에 있기 때문에 큰 소리로 외쳐야하고 프로젝트가 성공적으로 빌드됩니다.

0

부모 프로젝트를 처음 만들 때 Jenkins 사용자의 Maven 저장소에는 modulA가 설치되지 않습니다. clean compile은 modulA에서 성공적으로 실행되지만 아무 것도 설치되지 않습니다. modulB에서 실행될 때 modulA에 대한 종속성을 해결할 수 없습니다.

젠킨스 직업의 목표가 clean compile 대신 clean install 인 경우 modulA 빌드가 시작되기 전에 modulA의 아티팩트가 Jenkins 사용자의 저장소에 설치되어 모두 작동합니다.

아마도 mvn install을 modulA에서 한 번 이상 실행했거나 IDE의 클래스 경로가 문제를 해결했기 때문에이 코드는 사용자의 컴퓨터에서 작동했을 것입니다.