Maven으로 테스트 클래스를 JAR에 포함시키는 방법: Assembly Plugin 활용

일반적으로 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 등의 다른 스코프를 고려할 수 있습니다

태그: maven Maven Assembly Plugin JAR Packaging Test Classes Java Build

9월 18일 20:05에 게시됨