[java] jar 실행파일 만드는 법
글쓴이: initiative / 작성시간: 화, 2004/09/14 - 5:49오후
jar 실행파일을 만들어 실행시키려고 합니다.
IDE 환경인 eclipse나 JBuilder 를 통하여 쉽게 jar 실행프로그램을 생성해내겠지만,직접 패키징하는 메커니즘을 알고싶은 거지요.
아래는 간단한 hello.jar 를 만든다고 하구요.
즉 D:\temp\test 에 manifest 파일이있고
D:\temp\test\JarTest 에 Hello.class, Hello.java --> Hello ~찍는 파일.
일단 manifest 파일을 만드는 것은 아래와 같이 만들었습니다.
Main-Class: Hello
-> 여기서 Hello 는 메인클래스이고 패키지를 쓰지 않았으며 manifest 파일 주의사항에 따라 한 줄 캐리지 리턴시킴.(cvfm 옵션 순서도 유의하여...)
그 다음 작업은 아래와 같이 수행하였습니다.
----- 실행 ---------------------------------------------- D:\temp\test>jar cvfm hello.jar manifest JarTest/ 추가된 manifest 추가 중: JarTest/(내부 = 0) (외부= 0)(0%가 저장되었습니다.) 추가 중: JarTest/Hello.class(내부 = 420) (외부= 288)(31%가 감소되었습니다.) 추가 중: JarTest/Hello.java(내부 = 107) (외부= 98)(8%가 감소되었습니다.) D:\temp\test>java -jar hello.jar Exception in thread "main" java.lang.NoClassDefFoundError: Hello D:\temp\test> -------------------------------------------------------------------
manifest 파일을 안만들고 하는 방법도 있던데.
http://bluemank.home.uos.ac.kr/moony_home/java/work/jar_dist.htm
흠..이방법도 써보았지만 잘 안되더군요.
Forums:
Re: jar 실행파일
jar 생성 방법을 보니
manifest 파일에 Hello 대신에 JarTest.Hello 라고 적어줘야 할거 같네요.
[code:1]jar -tvf hello.jar [/code:1]
jar -tvf hello.jar
해보시면, jar 파일 내부의 JarTest/ 의 경로에 class 파일이 위치함을 알수 있습니다.
하지만 컴파일시에 JarTest 란 package 로 컴파일 된것이 아니기 때문에
Main-Class: JarTest.Hello
하더라도, 실행은 되지 않습니다.
저같은 경우는, JarTest/ 의 위치에서 jar 를 묶었었는데
위에서처럼
jar 파일 내부의 JarTest/ 의 경로에 꼭 class 를 넣고 싶으실때는,
manifest 파일에
Class-Path: JarTest/
를 추가해 주시면 될것 같습니다.ps. 잘 설명된 곳이 있어 링크합니다.
http://www-903.ibm.com/developerworks/kr/java/library/j-jar.html
Class-Path: JarTest/ 를 manifest 파일에 추
Class-Path: JarTest/
를 manifest 파일에 추가해주고 위의 작업을 수행한 결과입니다.
참고로 hello.jar 의 구성은 다음과 같으며
MANIFEST 파일을 열어본 결과입니다.
입니다.
잘 안되네요..
With Everlasting Passion about new Tech. and Information!
[code:1]---- MANIFEST.MF 파일 ----------
Jar 파일 외부 클래스들이 필요하지 않다면 Class-Path 속성은 필요없습니다.
(잘못된 Class-Path가 있어도 문제가 되지는 않습니다)
Main-Class는 full qualified classname 을 적어주셔야 합니다.
rath 님이 말씀해주신 데로 하여 해결하였습니다.아래는 절차입니다.
rath 님이 말씀해주신 데로 하여 해결하였습니다.
아래는 절차입니다.
즉 manifest 파일을 수정하였습니다.
-C 이 옵션의 의미는 잘 모르겠더군요.
암튼 답변들이 달라 혼동되었으나 댓글주신 분들께 감사드립니다. :-)
아마 이런 방법외에 다른 방법이 있을 줄로 압니다.
With Everlasting Passion about new Tech. and Information!
댓글 달기