본문 바로가기
카테고리 없음

jar

by jnick 2022. 5. 22.

java class file 등을 압축한다. 

 

package path 와 동일한 구조로 압축되어야 실행시 path 를 찾아간다. 

논리적인 path 와 물리적인 path 가 동일해야 한다. 

 

Hello.java

package foo;

class Hello {
	public static void main(String[] args) {
    	System.out.println ("Hello!");
    }
}

Hello.java 파일이 project1\src\foo\Hello.java 위치에 있고 project1.jar 이란 이름으로 압축 한다면

project1.jar 의 내부 구조는 

foo
   -Hello.class

가 되어야 한다. 

project1\ 에서 압축 한다면

jar cf test.jar -C src/* ../

project1\src 에서 압축 한다면 

jar cf test.jar *

실행은 

java -cp test.jar foo.Hello

 

 

-jar 로 실행하기 위해서는 manifest 파일에 정보를 추가 해야 한다. 

jar 로 압축시 META-INF/MANIFEST.MF 파일이 자동으로 생성되나 정보를 추가 하지 않으면 비어 있는 상태다. 

 

 

manifest.txt ( 파일이름은 어떤것이든 상관없다 )

Main-class: foo.Hello

 

project1\manifes.txt 파일이 있고 project1\src 에 컴파일된 소스가 있다면

% jar cvmf manifest build/hel.jar -C src/* ../
added manifest
adding: foo/(in = 0) (out= 0)(stored 0%)
adding: foo/Hello.class(in = 422) (out= 291)(deflated 31%)
adding: foo/Hello.java(in = 120) (out= 112)(deflated 6%)

 

test.jar 의 내용

$jar tf test.jar
META-INF/
META-INF/MANIFEST.MF
foo/
foo/Hello.class
foo/Hello.java

 

 

 

실행은 

% java -jar test.jar 
Hello World!!!