안녕하세요! 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
공감은 로그인이 필요없습니다
공감은 저에게 포스팅을 이어나갈 수 있는 힘이 됩니다..
'프로그래밍 [KOR] > Java' 카테고리의 다른 글
[Java] jar파일로 exe 실행파일 만들기/배포하기 by Launch4j (6) | 2017.09.18 |
---|