maven 으로 executable jar 맨들기(maven-jar-plugin, maven-dependency-plugin 이용)

일반 웹어플리케이션이 아닌 그냥 보통 일반 프로그램인 경우 maven packaging  타입을 war 가 아니라 jar 로 pom.xml 파일을 설정한다.

요래 설정한후 디펜던시들을 쪽쪽 추가하면서 후로그램을 맨들다 후로그램이 다 완성되었다면~~.

내가만든 후로그램과(Executable jar), 내 후로그램에서 사용한 라이브러리들을(디펜던시) 묶어서 패키징을 해야 한다.




요런 패키징을 위해서 프로젝트 pom.xml 의 build 엘리먼트를 요래 설정해 주면된다. 
설명은 주석으로 대신함.
<properties>
	<deploy.target.dir>c:/myproject</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>




요래 해준다음 mvn clean package 를 뽓 실행시켜주면, deploy.target.dir 로 설정된 c:\myproject 폴더에 myprogram.jar 파일이 생성되고 c:\myproject\lib 폴더에 디펜던시들이 쪽 복사가 된다.



※ 요 jar 파일을 실행할려면

일반 자바후로그램인 경우 java -jar myprogram.jar  로
Swing이나 SWT 같은 GUI 후로그램인 경우 javaw -jar myprogram.jar 로 실행하면 된다.