2013-06-18 7 views
4

컴파일 할 수없는 다중 모듈 maven 프로젝트가 있습니다. Nexus 저장소가 로컬 네트워크에 연결되어 있고 작동 중입니다 (IntelliJ Idea는 해당 저장소에만있는 내 종속성을 해결할 수 있음). Jetbrains TeamCity를 통해 구축하고 있습니다. 나는 TeamCity가 설정 한 여러 가지 다른 빌드 구성 (같은 settings.xml 사용) 이후로 작업하고 있음을 확신합니다. 나는이 문제를 일으킬 수있는 것에 대해 약간의 상실감이있다. 여기 내 치어 파일은 다음과 같습니다Maven 다중 모듈 프로젝트, 종속성 해결되지 않음

부모 POM :

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.company.product.plugins</groupId> 
    <artifactId>plugin-parent</artifactId> 
    <version>1.2-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>product-wireless-plugin</module> 
     <module>product-paging-plugin</module> 
    </modules> 

    <distributionManagement> 
     <repository> 
      <id>releases</id> 
      <url>http://192.168.2.192:8081/nexus/content/repositories/releases/</url> 
     </repository> 
     <snapshotRepository> 
      <id>snapshots</id> 
      <url>http://192.168.2.192:8081/nexus/content/repositories/snapshots</url> 
     </snapshotRepository> 
    </distributionManagement> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>autoincrement-versions-maven-plugin</id> 
      <name>autoincrement-versions-maven-plugin</name> 
      <url>http://autoincrement-versions-maven-plugin.googlecode.com/svn/repo</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>autoincrement-versions-maven-plugin</artifactId> 
       <version>2.0-SNAPSHOT</version> 
       <executions> 
        <execution> 
         <id>update-pom-versions</id> 
         <goals> 
          <goal>increment</goal> 
          <goal>commit</goal> 
         </goals> 
         <phase>compile</phase> 
         <configuration> 
          <autoIncrementVersion>true</autoIncrementVersion> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <testFailureIgnore>true</testFailureIgnore> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

제품 무선 치어 :

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>plugin-parent</artifactId> 
     <groupId>com.company.product.plugins</groupId> 
     <version>1.2-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.company.product.plugins</groupId> 
    <artifactId>product-wireless-plugin</artifactId> 
    <version>0.1.2</version> 

    <distributionManagement> 
     <repository> 
      <id>releases</id> 
      <url>http://192.168.2.192:8081/nexus/content/repositories/releases/</url> 
     </repository> 
     <snapshotRepository> 
      <id>snapshots</id> 
      <url>http://192.168.2.192:8081/nexus/content/repositories/snapshots</url> 
     </snapshotRepository> 
    </distributionManagement> 

    <dependencies> 
     <dependency> 
      <groupId>com.company.product</groupId> 
      <artifactId>product-common</artifactId> 
      <version>0.9.1</version> 
     </dependency> 
    </dependencies> 

</project> 

제품 - 페이징 치어 :

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>plugin-parent</artifactId> 
     <groupId>com.company.product.plugins</groupId> 
     <version>1.2-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.company.product.plugins</groupId> 
    <artifactId>product-paging-plugin</artifactId> 
    <version>0.1.2</version> 

    <distributionManagement> 
     <repository> 
      <id>releases</id> 
      <url>http://192.168.2.192:8081/nexus/content/repositories/releases/</url> 
     </repository> 
     <snapshotRepository> 
      <id>snapshots</id> 
      <url>http://192.168.2.192:8081/nexus/content/repositories/snapshots</url> 
     </snapshotRepository> 
    </distributionManagement> 

    <dependencies> 
     <dependency> 
      <groupId>com.company.product</groupId> 
      <artifactId>product-common</artifactId> 
      <version>0.9.1</version> 
     </dependency> 
    </dependencies> 

</project> 

내가 점점 오전 오류 is :

com.company.product.plugins : product-wireless-plugin [13:54:16] [com.company.product.plugins : product-wireless-plugin] 'C :/TeamCity/buildAgent/work에서 데이터 가져 오기/확실한 '프로세서가있는 /40ac813105cf8bd7/product-wireless-plugin/target/surefire-reports/TEST-*.xml [13:54:16] [com.company.product.plugins : product-wireless-plugin] 확실한 report watcher [com.company.product.plugins : product-wireless-plugin] 다운로드 위치 :/location/nexus/content/groups/public/com/company/product/product-parent/0.9.0 /product-parent-0.9.0.pom [13:54:16] [com.company.product.plugins : product-wireless-plugin] 프로젝트 제품 - 무선 - 플러그인에서 목표를 실행하지 못했습니다. 종속성을 해결할 수 없습니다. project com.company.product.plugins : product-wireless-plugin : jar : 0.1.2 : [com.company.prod]에 대한 종속성을 수집하는 데 실패했습니다. uct : product-common : jar : 0.9.1 (compile)]

이 문제를 디버깅하는 동안 나는 상당한 손실을보고 있습니다 ... 누군가에게 제안 사항이 있습니까?

+0

1)이며, 거의 항상있다 더 자세한 오류 메시지 및/또는 스택 로그의 앞부분에있는 스택 추적. 2) 빌드를'-X' 플래그로 다시 실행하십시오. – noahlz

+0

@noahlz 답변으로 의견을 게시 할 수 있다면 받아 들일 것입니다. 디버깅 방법을 사용하여 문제를 찾을 수있었습니다. –

답변

7

이런 종류의 문제를 해결하기위한 여러 접근법/도구가 있습니다.

  1. "종속성을 확인할 수 없습니다."라는 오류의 경우 빌드 로그의 앞부분에 거의 항상 자세한 오류 메시지 및 스택 추적이 있습니다. Maven 로그는 실제로 매우 장황하다. 빌드 실패로부터 여러 화면을 "루트"오류 메시지로 검색해야한다.

  2. -X 플래그를 사용하여 빌드를 다시 실행하십시오. 여기에 documentation of Maven command line switches

  3. 또 다른 옵션은을 사용하여 전 이적 종속성의 전체 그래프를 검사하는 것입니다. mvn help:effective-pom이 "종속성을 확인할 수 없습니다"라는 오류에 대한 Settings.XML이, 활성 프로파일을 고려하여 pom.xml 파일을 출력 또 다른 유용한 도구 등 마찬가지로 mvn help:active-profiles

0

다중 모듈 빌드에는 많은 문제가 있습니다. '수 (

<dependencies> 
    <dependency> 
     <groupId>com.company.product</groupId> 
     <artifactId>product-common</artifactId> 
     <version>0.9.1</version> 
    </dependency> 
</dependencies> 

하나의 저장소에 존재하지 보였다 또는 당신이 그것을 또는 다운로드가 어떤 이유에 따라 실패가 포함 된 저장소에 액세스하지 않은 : 가장 중요한 하나는 종속성을 정의하는 것입니다 맞춰봐!). Artifactory, Nexus, Archiva와 같은 저장소 관리자를 사용하고 있습니까? 그렇지 않다면 사용을 권장합니다. 멀티 모듈 빌드는 부모를 통해 버전을 정의해야

<parent> 
     <artifactId>plugin-parent</artifactId> 
     <groupId>com.company.product.plugins</groupId> 
     <version>1.2-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.company.product.plugins</groupId> 
    <artifactId>product-wireless-plugin</artifactId> 
    <version>0.1.2</version> 

과 의미 이슈에서 하지 : 그렇다 서로 다른 부모에 대한 버전 및 무선 모듈에서 모듈을 사용하고 있는지에서

위는 다음과 같이해야합니다 : 그것은 부모로부터 상속됩니다 원인

<modelVersion>4.0.0</modelVersion> 
<parent> 
    <artifactId>plugin-parent</artifactId> 
    <groupId>com.company.product.plugins</groupId> 
    <version>1.2-SNAPSHOT</version> 
</parent> 

<groupId>com.company.product.plugins</groupId> 
<artifactId>product-wireless-plugin</artifactId> 

모듈은, 버전 자체를 정의해서는 안된다. 또한 부모가 SNAPSHOT 버전을 정의하는 반면 릴리스 버전 (1.2)을 정의하는 모듈이 있음을 알 수 있습니다. 개발중인 응용 프로그램/모듈은 1.2-SNAPSHOT 등을 의미하는 SNAPSHOT 버전을 정의해야합니다.

distributionManagement의 정의에 따라 동일하게 적용됩니다. 프로젝트의 부모에서만 한 번 정의해야합니다.

BTW. 여러 프로젝트가 있다면 distributionManagement, pluginManagement, dependencyManagement 등과 같은 기본 정의를 포함하는 회사 상위를 정의하는 것이 가장 좋습니다.

+0

나는 사실상 내 문제의 원인 이었기 때문에 아이들과 부모 사이에서 동일하게 될 필요가있는 버전에 대해서 당신과 의견이 다릅니다. 라이브러리 "product-common"에는 상위 pom이 있습니다. 나는 상위 버전과 모든 하위 버전 간의 주요 버전 번호를 동기화하여 유지했습니다. 그러나 때때로 버그를 수정하기 위해 자식 폼 (부 버전) 중 하나에 대한 업데이트를 게시하고 부모의 모든 자식 라이브러리의 버전을 증가시키는 것은 의미가 없습니다. 버전 번호가 계단식으로 배열됩니다. 자식 pom에 버전 번호가 있으면 부모의 버전보다 우선합니다. –

+0

또한, downvote는 질문이 내 Nexus 저장소와 라이브러리가 내 레포를 통해 해결되었다는 사실을 언급했기 때문에 질문을 제대로 읽지 못했기 때문에 나타납니다. –

2

그래, @noahlz의 입력으로 문제를 해결했습니다. -X 플래그를 사용하여 빌드를 디버깅 한 후에 "product-common"(product-parent)의 상위 pom을 찾을 수 없음을 발견했습니다. Sonatype Nexus 저장소를 탐색 한 후, 새 빌드 모듈이 새 모듈이 추가되었을 때 상위 버전의 새 버전 만 게시한다는 것을 발견했습니다. 그래서 부모님의 pom 버전이 0.9.0이었을지라도 저장소의 최신 버전은 0.6.1입니다. 나는 컴파일 타임에 부모 pom (0.9.0 버전 번호)에 액세스했기 때문에 "제품 공통"라이브러리가 올바르게 컴파일되고 있다고 가정합니다. 어쨌든, "product-common"의 parent pom 버전을 저장소의 가장 최근 버전을 가리 키도록 변경하면 플러그인과 관련된 빌드 문제를 해결할 수 있습니다.

관련 문제