[maven-2] 다중 모듈 프로젝트의 Maven 테스트 종속성

멀티 모듈 프로젝트를 빌드하기 위해 maven을 사용합니다. 내 모듈 2는 컴파일 범위의 모듈 1 src와 테스트 범위의 모듈 1 테스트에 의존합니다.

모듈 2-

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>test</scope>
   </dependency>

이것은 잘 작동합니다. 내 모듈 3이 Module1 src에 의존하고 컴파일 타임에 테스트한다고 가정하십시오.

모듈 3-

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>compile</scope>
   </dependency>

를 실행 mvn clean install하면 내 빌드가 모듈 3까지 실행되고 모듈 1 테스트 종속성을 해결할 수 없어 모듈 3에서 실패합니다. 그런 다음 mvn install모듈 3에서만 수행하고 돌아가서 mvn install부모 pom에서 실행 하여 빌드합니다. 이 문제를 어떻게 해결할 수 있습니까?



답변

무엇을 하려는지 의심 스럽지만 프로젝트 (module1)를 위해 만든 테스트를 다른 프로젝트에서 재사용하고 싶다고 가정합니다. 첨부 된 테스트 사용에 대한 가이드 하단의 메모에 설명되어 있습니다 .

이 가이드의 이전 버전 <classifier>tests</classifier>에서는 <type>test-jar</type>. 이것은 현재 일부 경우에 작동하지만 설치 전 라이프 사이클 단계가 호출되면 테스트 JAR 모듈 및 소비자의 리액터 빌드 중에 제대로 작동하지 않습니다. 이러한 시나리오에서 Maven은 리액터 빌드의 출력이 아닌 로컬 / 원격 저장소에서 테스트 JAR을 확인합니다. 분명히 저장소의 JAR이 오래되었거나 완전히 누락되어 빌드 실패를 일으킬 수 있습니다 (참조 : MNG-2045 ).

따라서 먼저 컴파일 된 테스트를 JAR로 패키징하고 일반적인 재사용을 위해 배포하려면 maven-jar-plugin다음과 같이 구성합니다 .

<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>
     </plugin>
    </plugins>
  </build>
</project>

그런 다음 평소와 같이 테스트 JAR 아티팩트를 설치 / 배포합니다 ( mvn install또는 사용 mvn deploy).

마지막으로 테스트 JAR을 사용하려면 지정된 유형의 종속성을 지정해야합니다 test-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>


답변

Pascals 질문에 대한 내 의견과 관련하여 나는 어리석은 대답을 찾은 것 같습니다.

<plugins>
    <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.2</version>
        <executions>
            <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
            <phase>test-compile</phase>
        </execution>
        </executions>
        <configuration>
            <outputDirectory>${basedir}\target</outputDirectory>
        </configuration>
    </plugin>
</plugins>

여기에서 볼 수있는 주요 차이점은 <phase>태그입니다.

나는 test-jar를 만들 것이며, 패키지 단계 이후뿐만 아니라 테스트의 컴파일 단계에서 사용할 수있을 것입니다.

나를 위해 작동합니다.


답변

https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html 은 다음과 같이 말합니다.

테스트 클래스를 포함하는 jar를 만드는 방법 테스트 클래스를 포함하는 jar를 만들려면 해당 클래스를 다시 사용하고 싶을 것입니다. 이 문제를 해결하는 방법에는 두 가지가 있습니다.

  1. The easy way 현재 프로젝트의 테스트 클래스로 연결된 jar를 만들고 전이 테스트 범위 종속성을 풉니 다.

  2. The preferred way 테스트 클래스로 별도의 프로젝트를 만듭니다.

자세한 내용은 해당 기사를 읽으십시오.


답변