code

다중 모듈 프로젝트의 Maven 테스트 종속성

codestyles 2020. 10. 10. 10:06
반응형

다중 모듈 프로젝트의 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 Create a separate project with the test-classes.

Please read that article for detail.

참고URL : https://stackoverflow.com/questions/1725476/maven-test-dependency-in-multi-module-project

반응형