가장 간단한 방법은 테스트 용기의 클래스를 패키징하도록 다른 프로젝트를 설정 한 다음 해당 프로젝트를 보통 test-scoped 종속성으로 설정하는 것입니다.
원하지 않거나 할 수없는 경우 어셈블리 플러그인을 사용하여 process-test-classes
단계 (즉, 테스트가 컴파일 된 후 테스트가 실행되기 전에)에 jar 파일을 만들 수 있습니다. 아래의 구성은 어셈블리 디렉토리를 호출하여 대상 디렉토리에서 해당 단계의 classloader-test-deps
이라는 jar 파일을 만듭니다. 그러면 테스트에서 필요에 따라 해당 항아리를 사용할 수 있습니다.
어셈블리 플러그인은 target/test-classes의 내용을 패키징하는 어셈블리 설명자 (src/main/assembly에서 test-assembly.xml)를 사용합니다. 나는 com.test 패키지와 그 자식의 내용을 포함하도록 필터를 설정했다. 이것은 jar의 내용을 적용 할 수있는 패키지 이름 규칙을 가지고 있다고 가정합니다.
어셈블리 플러그인은 기본값으로 attach
을 false로 지정하여 추가 아티팩트로 jar를 첨부합니다. 설치 및 배포되지 않습니다.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-2</version>
<executions>
<execution>
<id>create-test-dependency</id>
<phase>process-test-classes</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>classloader-test-deps</finalName>
<attach>false</attach>
<descriptors>
<descriptor>src/main/assembly/test-assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
이
내가 질문을 이해
<assembly>
<id>test-classloader</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.testOutputDirectory}</directory>
<outputDirectory>/</outputDirectory>
<!--modify/add include to match your package(s) -->
<includes>
<include>com/test/**</include>
</includes>
</fileSet>
</fileSets>
</assembly>
확실하지 테스트 assembly.xml의 내용이다. 테스트를 실행하기 전에 특정 테스트 클래스에서 항아리를 만들고 싶습니까? –
테스트가 정확히 단위 테스트가 아닙니다. 고립 된 유닛을 테스트하는 것이 아니라 여러 유닛 (클래스 로더, 자바 클래스 로더, 파일 io)의 통합을 테스트합니다. –
테스트 및 통합 테스트를 추가하여 더 많은 응답을 얻을 수 있습니다. –