일반적으로 Maven 빌드 과정에서 src/test 디렉토리의 클래스는 결과 JAR에 포함되지 않습니다. 하지만 특정 상황에서는 테스트 코드를 실행 가능한 형태로 배포해야 하는 요구사항이 발생하기도 합니다. 이 문서는 테스트 클래스를 포함한 커스터마이징된 JAR 생성 방법을 설명합니다.
1. 플러그인 설정
pom.xml 파일에 Maven Assembly Plugin을 추가합니다. 기존 빌드 플러그인과의 충돌 방지를 위해 다른 패키징 플러그인 제거를 권장합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>com.example.ApplicationRunner</mainClass>
</manifest>
</archive>
<descriptors>
<descriptor>src/main/config/custom-assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
2. 어셈블리 정의 파일 생성
프로젝트 구성에 따라 어셈블리 설정 파일을 생성합니다. 이 예제에서는 src/main/config 경로에 custom-assembly.xml을 생성합니다.
<assembly>
<id>test-inclusive</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<scope>test</scope>
<useProjectArtifact>true</useProjectArtifact>
<outputDirectory>/</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.directory}/test-classes</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.class</include>
</includes>
</fileSet>
</fileSets>
</assembly>
3. 빌드 실행
Maven 명령어를 통해 패키징을 수행합니다. 빌드 결과에는 일반 JAR와 어셈블리 플러그인을 사용한 별도의 JAR가 생성됩니다.
mvn clean package
생성된 JAR 파일 실행 방법:
java -jar target/your-artifact-1.0-test-inclusive.jar
주의사항
- 메인 클래스 경로는 실제 프로젝트의 테스트 클래스 위치에 맞게 수정해야 합니다
- Spring Boot 프로젝트의 경우 기본적으로 테스트 클래스를 포함하는 빌드 방식을 사용하므로 별도 설정이 불필요할 수 있습니다
- 의존성 스코프 설정 시 test 외에도 runtime 등의 다른 스코프를 고려할 수 있습니다