파일 위치 및 명령어 실행 위치 현황
D:\Java_EXE \
└Genealogy2 \                     ←명령어 실행 위치
└data
└lib                          ← swt.jar 위치
META-INF                                     (folder)
└src                         ← 실행 파일 위치(package)

● META-INF 폴더는 root 폴더 바로 아래에 만든다.
( src 등 기타 위치에 생성하는 건 의미없다.
eclipse에서 export를 통해 jar를 만들 때 root 폴더가 아닌 곳에 만든 manifest.mf를 참조할 경우
eclipse가 root 폴더 아래 새로 만들기 때문에 실행 파일 설정이 정상적으로 이뤄지지 않는다. )

root\META-INF 밑에 MANIFEST.MF 만들어서 아래 내용 추가하고, Export 할 때 manifest.mf를 추가해 준다. (eclipse에서 작업해야 Resource is out of sync ~~~ 안 뜬다. 뜨면 한 번 열어서 읽어 준다.)

MANIFEST.MF 파일 내용
Manifest-Version: 0.1
Class-Path: lib/swt.jar
Main-Class: src.ManageGenealogy


Class-Path: lib/swt.jar   ← jar 파일 내부 폴더에 둔다.
           그 외 참조할 class가 있으면 그 위치를 적어준다. 구분자는 ' '
           이 예제의 경우, swt.jar 를 제외한 모든 class가 메인 클래스와 같은 src 하부에 있어서 추가없음.
           Class-Path는 72자까지만 됨.
           Class-Path는 외부 경로(local)만 가능함. Jar 내부나, Internet 등으로 접근하는 Jar는 참조할 수 없음.
            (-> 내가 만든 jar 안에 내가 참조할 외부 jar를 넣고, Class-Path에 잡아주어도 참조하지 못한다.
                  참조하려면 1. 참조할 jar를 풀어서 내 jar 안에 넣고, sealed 처리하던가
                                  2. 외부에 참조할 jar를 위치시키고 class-path에 경로를 잡아준다.

Main-Class: src.ManageGenealogy     ←  실행 파일 경로 및 파일 명
jar 파일을 실행 가능하게 만든다.
실행 명령어 : java -jar Genealogy.jar

※ 주의사항 :
1. MANIFEST.MF 내에서 다른 class, directory, jar를 참조할 때는 경로 정보를 입력할 때 '/'를 사용한다.
   (경우에 따라서 '\'를 쓰게 되는 경우도 있으니 아래 Exception 발생 시 경로를 수정해 볼 것.
    Exception in thread "main" java.lang.NoClassDefFoundError: aaa/bbb/ccc )
2. 각 'attirbute :' 다음에 공백 한 칸 둘 것. (ex 'Class-Path: ')
3. Main-Class attribute 다음에 carrage return(엔터) 하나 둘 것. 안 그러면 실행 시 main class를 인식 못 함.

참조 : http://www.ibm.com/developerworks/kr/library/j-jar/index.html
         http://java.sun.com/docs/books/tutorial/deployment/jar/basicsindex.html
         http://blog.naver.com/echris7?Redirect=Log&logNo=140012585340
관련 글 : http://digicom.tistory.com/165
---------------------------------------------------------------------------------------------------




Posted by 라딘.

댓글을 달아 주세요

  1. 지나가던이 2014.12.03 18:55  댓글주소  수정/삭제  댓글쓰기

    자세한 설명 감사합니다.^^