2011-01-24 2 views
13

다중 모듈 프로젝트에서 test-jar 종속성을 사용하는 데 문제가 있습니다."mvn compile"에 "test-jar"종속성이 필요합니다

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Failed to resolve artifact. 

Missing: 
---------- 
1) org.cleartk:cleartk-token:test-jar:tests:0.7.0-SNAPSHOT 
:
<modelVersion>4.0.0</modelVersion> 
<groupId>org.cleartk</groupId> 
<artifactId>cleartk-syntax</artifactId> 
<version>0.5.0-SNAPSHOT</version> 
<name>cleartk-syntax</name> 
... 
<dependencies> 
    ... 
    <dependency> 
     <groupId>org.cleartk</groupId> 
     <artifactId>cleartk-token</artifactId> 
     <version>0.7.0-SNAPSHOT</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 

은 내가 받는다는 2를 사용 mvn compile을 다음과 같은 오류를 실행 얻을 경우 : 나는 cleartk-syntax 모듈이 cleartk-token 모듈의 test-jar이 같은에 의존한다는 것을 선언 할 때 예를 들어, (전체 코드는 here입니다) 내가 받는다는 3를 사용하는 경우

내가 오류 얻을 : 후자의 경우

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4.654s 
[INFO] Finished at: Mon Jan 24 21:19:17 CET 2011 
[INFO] Final Memory: 16M/81M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal on project cleartk-syntax: Could not resolve 
dependencies for project org.cleartk:cleartk-syntax:jar:0.5.0-SNAPSHOT: Could 
not find artifact org.cleartk:cleartk-token:jar:tests:0.7.0-SNAPSHOT 

을, 나는 파이야 나는 타입이 아닌 test-jar 타입의 인공물을 찾아야한다고 생각했기 때문에 혼란 스러웠다.

maven 2 또는 maven 3을 사용하면 mvn compile package -DskipTests을 실행하여 컴파일 할 수 있습니다. Maven 3에서는 mvn compile test-compile을 실행하여 컴파일 할 수 있습니다.

그러나 compile 단계에서 maven 2 또는 maven 3이 test-jar 종속성을 찾는 이유는 무엇입니까? 그러한 종속성을 찾기 위해 test-compile 단계가 될 때까지 기다려야하지 않습니까?

업데이트 : 대답은 내 컴파일 단계에서 사용 된 maven-exec-plugin이 requires dependency resolution of artifacts in scope:test 인 것입니다. 나는 a feature request to remove the scope:test dependency을 만들었습니다.

답변

8

이것은 나에게 명백한 버그처럼 보입니다.

동일한 문제가 있으며 Maven 3.0.1 및 3.0.2를 테스트했습니다. 유효성 검사가 실패하지 않고 컴파일 단계 만 실패합니다. Maven 3을 사용하면 mvn compile이 깨지지만 mvn test-compile이 작동합니다.

컴파일 단계에서 원자로에서 테스트 - 병 아티팩트를 찾고 repo하지만 종속성이 테스트 범위에 있기 때문에 그렇게해서는 안됩니다. 테스트 범위 아티팩트는 컴파일하지 않고 테스트 컴파일 중에 해결해야합니다.

결과적으로 기본 테스트 컴파일 단계 대신 maven-compiler-plugin의 testCompile 목표를 컴파일 단계에 매핑하여 해결할 수 있다고 생각했습니다.

내가 바로 옆 상류 치어의 테스트 항아리 생성을 추가하는 부분에, 내 치어이 추가 :

<!-- there is a bug in maven causing it to resolve test-jar types 
     at compile time rather than test-compile. Move the compilation 
     of the test classes earlier in the build cycle --> 
    <plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>default-testCompile</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>testCompile</goal> 
     </goals> 
     </execution> 
    </execution> 
    </plugin> 

그러나 그것은 작동하지 않습니다 중 하나를 컴파일 및 테스트 사이의 5 단계 때문에 -compile이 실행되지 않고 테스트 클래스 경로와 같은 것을 설정합니다.

이 버그가 수정 될 때까지 실제 해결 방법은 compile 대신 test-compile을 사용하는 것입니다.

+0

나는 첫 번째 테스트 단계가 테스트 컴파일임을 확인했다. 프로세스 테스트 리소스가 실패합니다. –

+0

나는이 버그에 부딪치지 않고 혼자가 아니라는 소식을 듣고 기쁘다. 귀하의 경우에는'exec : java' 플러그인을 사용하고 있습니까? 저에게 문제의 일부로 보입니다. 그렇지 않은 경우 다른 플러그인을 실행 단계에 바인딩합니까? – Steve

+0

최근에 발견했지만 아직 풀지 않은 것은 3 개의 POM 파일 집합이 매우 줄어들어 문제가 발생할 수 있다는 것입니다. 이 세 가지 (내 프로젝트)가 아무 것도 상속하지 않으면 작동합니다. org.apache에서 상속받은 경우 : 아파치가 중단됩니다. 그래서 거기에 정의 된 플러그인 중 하나가 아마 그것을 어기는 것입니다. 거기에 exec : java 플러그인은 없지만 플러그인과 exec 중 하나는 아마도 상류에서 고장난 다른 것에 의존 할 것입니다. 내가 범위를 좁힐 수 있다면 여기에 설명하겠습니다. –

0

maven2를 사용 중입니다. 대답은 maven lifecycle management에 있다고 생각합니다. 기본 수명주기의 첫 번째 단계는 '프로젝트 유효성을 검사하고 필요한 모든 정보를 사용할 수있는'유효성 검사입니다. (http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 참조).

그래서 maven은 나중에 필요한 모든 의존성을 얻기 위해 최선을 다합니다.

+0

그렇다면 왜 mvn compile package가 작동합니까? – Steve

+0

-DskipTests = true 변수를 제공하는 경우에만 작동한다고 언급했습니다. 그게 Maven의 내부 최적화 일 수 있습니까? – WeMakeSoftware

+0

-DskipTests도없이 작동합니다. 필자는 단지 컴파일을 시도하고 테스트하지 않기 때문에 추가했습니다. – Steve

1

심각한 디버깅을 수행하여 exec:java 플러그인 test-jar 종속성과 mvn compile 사이의 상호 작용 인 것으로 나타났습니다.

즉, exec:java을 실행 단계에 연결하면 mvn compile은 컴파일시에 test-jar 종속성을 찾기 시작합니다. exec:java 플러그인 선언에서 <executions> 요소를 제거하면 mvn compile이 다시 정상적으로 작동합니다. 누군가가 그것을 파악하면 정말 exec:javatest-jar 또는 mvn compile 그래서 아마 버그가 다른 곳의 경우/이동합니다에 버그가 있는지 여부를 알 수 없지만

내가, 여기에 exec:java 플러그인에 대한 버그 리포트를 제출 :

http://jira.codehaus.org/browse/MEXEC-91

업데이트 :

: 정말 버그가 아니다은 받는다는 - 간부 - 플러그인은 여기 필요로하는 테스트 의존성으로 설명되어 있습니다210

그렇다고 훌륭한 기능을 만들지는 않습니다. ;-)

7

필자의 경우 근본 원인은 유형의 test 범위에서 종속성으로 사용해야하는 모듈에 필요한 maven-jar-plugin 구성을 포함하지 않았습니다. 아래 스 니펫이 없으면 해당 모듈에서 mvn deploy으로 전화하면 테스트 항아리가 배포되지 않습니다.

<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
     <goals> 
      <goal>test-jar</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

은 자세한 내용은 https://maven.apache.org/guides/mini/guide-attached-tests.html를 참조하십시오.

+0

그건 내 근본 원인이기도하다. . – riverhorse

관련 문제