본문 바로가기

Util & Etc & Build Tool/Maven

[Maven] Maven 을 이용하여 Executable Jar 만들기.

http://stove99.tistory.com/79 참고


요약 : 


1. 아래 내용을 pom.xml 에 추가

2. Run as -> Maven install 하면 dist 위치에 myprogram.jar 생김.


주의사항

<mainClass>oasyss.Main</mainClass>

아래에 위와 같이 설정하면 package.class명으로 실행이 안됨.


예를 들면, Java -classpath example.jar ch03.HelloWorld 하면 메인 클래스 찾을 수 없다고 에러 나옴.


그러니 저 oasyss.Main 을 주석처리하고 해야함.


<properties>
    <deploy.target.dir>dist</deploy.target.dir>
    <lib.dir>lib</lib.dir>
    <jar.name>myprogram</jar.name>
</properties>
     
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.2</version>
             
            <configuration>
                <finalName>${jar.name}</finalName>
                <!-- jar 파일이 생성될 폴더 -->
                <outputDirectory>${deploy.target.dir}</outputDirectory>
                <archive>
                    <manifest>
                        <!-- public static void main() 함수가 있는 클래스 지정 -->
                        <!-- <mainClass>oasyss.Main</mainClass> -->
                         
                        <!-- jar 파일 META-INF/MANIFEST.MF 에 클래스패스 정보 추가 -->
                        <addClasspath>true</addClasspath>
                         
                        <!--
                            클래스패스에 추가시 prefix 설정
                            ex) log4j-1.2.16.jar -> lib/log4j-1.2.16.jar 로 추가됨
                        -->
                        <classpathPrefix>${lib.dir}/</classpathPrefix>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
         
        <!-- package 실행할때 프로젝트 디펜던시들을 특정폴더로 복사해주게 설정  -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <outputDirectory>${deploy.target.dir}/${lib.dir}</outputDirectory>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
        </plugin>
    </plugins>
</build>