본문 바로가기

프로그래밍 [KOR]/Java

CMD창에서 실행가능한 jar파일 생성하기

안녕하세요! Ji-nun입니다!


이번 포스팅에서는 이클립스와 같은 통합 개발 환경(IDE)에서가 아닌

일반 cmd(콘솔)창에서 jar 실행파일을 만드는 방법 알려드리려 합니다.


제 경우에는 프로그램을 작성할 때 이클립스와 같은 개발 환경을 사용하지 않고 Sublime Text와 같은 간단하고 심플한

 텍스트 입력창을 이용하는데요.(깔끔하기도하고 뭔가 느낌 있어보여서...^^)


IDE를 사용하여 jar파일을 생성하는 것도 편하지만 저는 cmd에서 jar 실행파일을 만들어 보겠습니다.



1. 우선 작성한 프로그램을 컴파일 해줍니다.



간편하게 컴파일하기 위해 C:\Java 경로로 옮겨주었습니다.


제 경우엔 json_simple-1.1.jar 라는 JSON을 사용하기위한 외부 라이브러리도 포함되어있습니다.


-콘솔을 이용한 Client 소스


-GUI를 이용한 Client 소스


-GUI를 이용한 Server 소스


소스를 여러가지로 작성했기 때문에 패키지로 묶어놨습니다. Server와 Client 소스를 따로 묶어두기위함입니다.




2. jar 파일을 생성합니다.


jar 파일을 생성하기에 앞서 jar와 jar의 옵션에 대해서 알아보겠습니다.


|| jar : Java Archive 의 준말이며, 소프트웨어에서 수많은 자바 클래스 파일과 연관 메타 데이터, 리소스(텍스트, 그림)을

   하나의 파일로 모아서 자바 플랫폼에 응용소프트웨어나 라이브러리를 배포하기 위한 패키지 파일 포맷입니다.

(출처: 위키백과 https://ko.wikipedia.org/wiki/JAR_(%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7)

|| 옵션

   

 -c

 새 아카이브를 생성

 -C

 지정된 디렉토리로 변경하고 다음 파일을 포함

 -t

 아카이브에 대한 목차를 나열

 -x

 아카이브에서 명명된 (또는 모든) 파일을 추출

 -u

 기존의 아카이브를 업데이트

 -f

 아카이브 파일 이름을 지정

 -v

 표준 출력에 대한 자세한 정보 출력을 생성

 -m

 지정된 증명 파일에서 증명 정보를 포함

 -0

 저장만 수행하며 zip 압축을 사용하지 않음

 -M

 입력 항목에 대한 증명 파일을 만들지 않음

 -i

 지정된 jar 파일에 대한 색인 정보를 생성

(출처: http://ra2kstar.tistory.com/125)


저는 이중에서 c v m f 4가지 옵션을 사용했습니다.


>jar  -cvmf  Manifest.txt  Server.jar  test\server\*.class  json_simple-1.1.jar

                [증명파일]   [파일이름]       [클래스파일]      [외부 라이브러리]


새 아카이브를 생성하며 지정된 증명 파일에서 증명 정보를 포함하고 아카이브 파일 이름을 지정한 후

 표준 출력에 대한 자세한 정보 출력을 생성하도록 했습니다.


[증명파일] - Manifest 텍스트 파일의 이름은 아무렇게나 하셔도 됩니다.

Manifest.txt 파일에는 외부 라이브러리가 없으시다면 단순히 Main-Class: test.server.ServerGUI 를 표기해 주시면 됩니다.


Manifest 파일을 생성하는 이유는 jar 파일을 생성하기 위해선 main() 함수가 어떤 클래스에 있는지 그 위치를 지정해 주어야 하기 때문입니다.


저는 파일을 패키지 단위로 지정했기 때문에 ServerGUI 앞에 test.server. 를 더했습니다.


그런데 Manifest를 생성하고 메인 클래스를 표기해 주었는데 


jar 파일 생성에는 문제없이 성공하였으나


-main 클래스를 찾지 못하는 오류 발생


이와 같은 오류가 뜨시는 분들은 Main-Class: test.server.ServerGUI 와 같이 메인클래스를 입력하시고 Enter를 쳐서

 공백을 만들어주시기 바랍니다. (가끔 공백이 없으면 인식을 못한다고 합니다. 제가 그랬습니다... -_-)


그리고 외부 라이브러리를 포함시키신 분들은 Mainfest.txt 파일에 Class-Path: json_simple-1.1.jar 와 같이

 표기해 주시면 됩니다. (입력하신후 Enter 필수!)


Class-Path를 입력시키지 않고 외부 라이브러리를 포함시키시면


Exception in thread main java.lang.noclassdeffounderror 와 같은 에러가 반겨줍니다.


[파일이름]

아카이브 파일 이름은 원하시는대로 지정해주시면 됩니다.


[클래스파일]

class파일의 위치가 현재 명령 프롬포트가 위치해 있는 곳이라면 클래스명만 적어주셔도 되며 해당 디렉토리의 모든 class 파일을 가져와야하신다면 *.class 와 같이 입력해주시면 됩니다.


저는 class파일이 test\server 디렉토리에 위치해 있었으며 여러가지를 가져와야하기 때문에 test\server\*.class를 입력했습니다.


 ※만약 파일을 하나하나 지정하실 때, 메인클래스$이너클래스.class 와 같은 class파일도 지정해주셔야 합니다!!


[외부 라이브러리 또는 더 추가해야할 파일]

파일명을 그대로 적어주시면 됩니다.



정상적으로 진행이 되셨다면 위와 같은 출력내용을 보실 수 있습니다.



3. jar 파일을 실행해봅니다.



CMD(명령 프롬포트)에 >java -jar Server.jar를 입력합니다.



기타 문제나 소스 작성에 빠진 부분이 없으시다면 상단의 이미지와 같이 실행이 됩니다.


GUI를 기반으로 만드셨다면 GUI가 실행되고 콘솔기반으로 만드셨다면 콘솔이 실행됩니다.


이번 포스팅은 여기까지입니다.


감사합니다 ^^





제 나름대로 생각을 정리하며 포스팅합니다.

정보전달에 있어 차질이 생기는 것을 우려해 나름대로 확실하게 검증을 하고 포스팅하려고 노력합니다.

본 포스팅에 잘못된 정보가 있거나 수정해야할 내용이 있다면 댓글 또는 아래의 이메일로 알려주시면 감사하겠습니다.

E-mail : silent_lhr@naver.com



공감은 로그인이 필요없습니다

공감은 저에게 포스팅을 이어나갈 수 있는 힘이 됩니다..