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!!!