2010-02-11 5 views
39

maven-jar-plugin 플러그인의 목표를 test-jar 목표로 사용하여 메이븐 프로젝트간에 공통 테스트 코드를 공유하는 명확한 해결책이 있습니다 (here 참조).메이븐 프로젝트간에 테스트 리소스 공유

나는 시험 자원과 유사한 일을 할 필요가, 특히, 나는 프로젝트 A의 테스트 리소스를 테스트하는 동안 프로젝트 B의 클래스 경로에서 사용할 수 싶어요.

<!-- Package and attach test resources to the list of artifacts: --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
        <jar destfile="${project.build.directory}/test-resources.jar"> 
         <fileset dir="${project.basedir}/test-resources" /> 
        </jar> 
       </tasks> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${project.build.directory}/test-resources.jar</file> 
         <type>jar</type> 
         <classifier>test-resources</classifier> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

을 그리고 프로젝트 B에서 정상 종속됩니다 :

프로젝트의 하나는 선언 할 필요가

<dependency> 
    <groupId>myproject.groupId</groupId> 
    <artifactId>myartifact</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <classifier>test-resources</classifier> 
    <scope>test</scope> 
</dependency> 

질문 : 모든 경우에 작동 하는가? maven-antrun-plugin없이 (더 많은 '가벼운'플러그인을 사용하여) 리소스를 묶을 수 있습니까?

+0

가이 보인다 :

<project> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.2</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> <configuration> <excludes> <exclude>**/*.class</exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> 

을 그리고 그것을 사용하기 :이 항아리에 자원 클래스를 갖는 문제를 이해하지 않는 동안, 당신은 항상 모든 .class 파일을 제외 할 수 있습니다 테스트 리소스를위한 원격 리소스 플러그인을 향상시켜야 함 - http://maven.apache.org/plugins/maven-remote-resources-plugin/index.html – cetnar

+0

@centar : 흥미로운 플러그인 정보를 보내 주셔서 감사합니다. bit offtopic :) –

답변

33

그냥 jar:test-jar를 사용 종속성 (자세한 내용은 this guide 참조)로 결과 JAR를 선언합니다.

<project> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>com.myco.app</groupId> 
     <artifactId>foo</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    ... 
</project> 
+0

실행 단계를 패키지로 설정하면 안됩니까? 테스트 jar'는 * "라이프 사이클 단계에 기본적으로 바인딩 :'package'."'항아리 때문에 @sal – sal

+1

입니다 * –

+0

@Pascal : 힌트 주셔서 감사합니다. 클래스에 리소스를 패키지하는 것이 맞습니다. 귀하의 답변에 +1하지만, 원래의 질문에 답을 얻지 못했습니다 (최적의 방법으로 테스트 리소스를 개별적으로 패키지하는 방법). –

0

이미 받는다는에서 test jar을 구축하는 목적이있다.

당신이 좀 더 유연한 뭔가가 필요 가정, 당신은 테스트 자원을 패키지와 같은 것을 함께 기본 패키지의 목표와 그 목표를 실행하기 위해 항아리 플러그인을 사용할 수 있습니다. 단지 목표를 실행할 때 번들로 원하는

 <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>test-resources</classifier> 
       <includes> 
       <include>**/*.whatever-you-want</include> 
       </includes> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

는 프로젝트 이름 - 버전 테스트 resources.jar에 추가 될 것입니다.

그런 다음 위에서 사용하는 것과 같은 의존성을 통해 프로젝트에 포함 할 수있다.

+0

'jar' 목표를 실행하면'maven-jar-plugin'이'클래스 d에 자동으로 바인드됩니다 irectory "가 아니라"test classes directory "입니다. 위의 코드는 단순히 일반 클래스를 패키징하고,'include '는 모든 테스트 리소스를 아티팩트에 도움이되지 않습니다. 죄송하지만 "-1". –

관련 문제