Gill Seung Sae

Developer

길승세

블로그 작업 중

Maven package 해보기(manifest(maven-jar-plugin), 의존라이브러리(maven-dependency-plugin) 설정)

12 May 2022 » develope, maven

1. Maven commands

Maven의 Build 관련하여 다양한 명령어들이 아래와 같이 존재한다.

         
Maven Command          Description
Clean          빌드 시 생성되었던 파일들 삭제(target 폴더 삭제)
Validate          프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는 지 확인
Compile          소스 컴파일
Test          유닛(단위) 테스트를 수행(테스트 실패시 빌드 실패로 처리, 스킵 설정 가능)
Package          실제 컴파일된 소스 코드를 jar, war 등 배포를 위한 패키지로 만듬
Verify          통합 테스트 결과에 대한 검사를 실행하여 충족하는지 확인
Install          패키지를 로컬 저장소에 설치
Site          프로젝트 문서와 사이트 작성, 생성 </tr>
Deploy          만들어진 package 를 원격 저장소에 release

2. Maven clean package 실행해보기

프로젝트 디렉터리에서 mvn clean package 명령어를 입력하면 패키징이 시작된 후 target이라는 디렉터리가 생성된다

package 실행 이미지추가

target 디렉터리로 이동하여 java -jar ~.jar 파일을 실행하면 어떤 오류가 생기겠지 target/SampleMavenApp-1.0-SNAPSHOT.jar에 기본 Manifest 속성이 없습니다. Manifest 설정이 이루어지지 않았기 떄문이다. 이 오류를 해결하기 위해서 maven-jar-plugin라는 플러그인을 dependecny에 설정 추가한다.

<plugins>
        ...
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.nhn.HttpServer</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        ...
</plugins>

만약 외부 라이브러리를 import 해서 포함시켰다면 해당 의존 라이브러리들도 package시 같이 추가되도록 maven-dependency-plugin라는 플러그인을 dependecny에 설정 추가 해준다.

<plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        ...
</plugins>

3. cmd 창 한글깨짐

혹시나 Build시 cmd창에서 한글이 깨져 보인다면 properties에 utf-8 설정을 추가한다.

<properties>
        ...
    <!-- 한글깨짐 -->
    <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
        ...
</properties>