Java 어플리케이션의 실행 에 대한 질문

익명 사용자의 이미지

안녕하세요

보통 컴파일언어로 컴파일하여 생성된 실행파일은 exe,com 형태로 완성되어 , 그자체만으로도 실행이되는데요.

Java로 제작한 파일은 class 형태로 완성이되어지고, 이것을 실행하려면 java 파일이름 형태로 command 상에서 실행을 해줘야 하는것으로 압니다.

Java 로 웹프로그램을 만들었을때는 웹브라우저를 통해 URL 로 접속하여 이용하는것이 자연스러워보이나..

윈도우용 어플리케이션을 만들었을때는, 사용자가 그것을 실행하는 과정이 자연스러워보이지않는데요..

이러한 고민이 제가 책에서 예제 수준으로만 접해봤기 때문에 생기는 고민인지
-실제 realworld 에서는 다른 대안이있다던가.
-실제 realworld 에서는 java 로 buddybuddy,nateon 등의 메신저 프로그램 은 개발하지않기때문에, 이러한 문제가 생길일이없다던가..

아니면 실제에서도 이렇게 Java 로 제작된 프로그램에 대해서 'java 파일이름' 으로 실행해야한다면 , 그러한 프로그램의 대표적인 예가 있을까요?

*참고로 java 로 제작한 파일이 class 로 변환된이후 이것을 exe 로 변환해주는 방법등을 통해 exe 파일로 변환 하는 내용은 알고있습니다.
이것에 대해서는 별로 좋지않은 방법이라 생각하여 , 이것을 제외하고 질문합니다.

감사합니다.

terzeron의 이미지

DOS 배치파일을 통해 java -cp Foo.jar Bar와 같은 방식으로 실행하기도 하고,
아니면 동일한 명령을 실행하는 exe를 만들어 감싸기도 합니다.

이런 이슈보다 더 어느 경로에 설치된 jre를 찾아서 사용할 것인지 지정하는 게
더 까다롭습니다. jar의 설치와 jvm 설치는 완전히 다른 단계에서 이뤄질 거거든요.

익명 사용자의 이미지

저도 글올리고나서 배치파일은 생각을 했고

방금전에 SDK Manager.exe 라는 파일을 보고 아 exe로 파일 실행하는 부분을 감쌀수도 있겠구나, 생각했습니다.

아 보통 그러면 exe 로 감싸는 경우가 많겠네요..

뒤에 말씀하신 부분은 , 아직 경험해보지못해 어떤 말씀인지 잘 모르겠으나, 앞으로 개발하다보면 부딪히게 될때 생각해보겠습니다.

답변 감사드립니다.

또 다른 방법이 있다면 다른분들도 알려주시면 감사하겠습니다. 제가 잘못생각하고있는 부분이 있다면 그부분에 대해서도 부탁드립니다.

익명 사용자의 이미지

기본적으로는 윈도에서 jar 파일을 더블클릭하면 자바 어플리케이션이 실행되지요.

알집이 깔려있으면 안되기도합니다. 어이없지요 -_-

jvm 옵션이나 스플래시 스크린등 여러 문제를 편하게 해결하기 위해서는 아래 프로젝트들을 참고하세요.

http://launch4j.sourceforge.net/

http://izpack.org/

http://code.google.com/p/appstart/

eclipse 와 netbeans 도 laucher 만드는 기능이 있습니다.

익명 사용자의 이미지

jar 파일을 더블클릭하면 자바 어플리케이션이 실행되는것은 몰랐습니다.

class 는 안되는데 jar 에 대해서는 되는것이 좀 부자연스러워보이긴하나(jar 이 class 파일의 압축을 목적으로 사용된다는 측면에서..)

그런것이 되는군요.. 하지만 명백한 java 만의 명백한 실행파일 형태로써 직관적으로 와닿지는 않습니다.

eclipse 와 netbeans 에서 제공하는 laucher 를 만드는 기능 또한, 그것이 pure 한 java 의 실행파일 포맷이라고 생각되어지지는 않습니다.

차라리, 아마도 Dos 의 배치파일을 이용하거나 exe 로 'java 파일이름' 을 수행하는 프로그램을 포함시키는것이 가장나은 pure 한 방법이라 생각되어지네요.

그런데 , 아직 까지 몇개의 실제 예를 보지못해서 어떤방법이 real industry 에서 사용되는지 모르겠네요.

답변감사드립니다. 제가 잘못생각하고 있는 부분이 있다면 알려주시면 감사하겠습니다.

HotPotato의 이미지

'pure한 java의 실행파일 포맷'이라는 게 좀처럼 와 닿지 않네요.
pure 이면 플랫폼에 독립적이어야 하는데 exe 로 감싸서 win32 에 한정시켜버리는 느낌이랄까요?

실제 사용 예라면, 흔치 않지만 순수 자바 기반 FA 일을 할 때, j2exe 라는 셰어웨어를 애용했습니다.
FA 자체가 실시간 콘솔로그도 확인해야 하는 상황이었기 때문에, j2exe 로 감쌌는데 콘솔(CMD)창이 안뜨면, 그냥 배치파일을 이용했었죠.

배치파일 이용 시 윈도우즈에서 JAVA_HOME 환경변수 잡아주거나 PATH 환경변수에 SDK 또는 JRE bin 경로 등록해주고

@java [긴 패키지명을 포함한 클래스명]

j2exe 같은 류의 프로그램을 이용하는 이점은 윈도우즈 환경에서 엔드유저가 사용하기 편리하도록 아이콘 파일을 등록, 메모리 사용량 지정, 라이브러리 classpath 등록은 물론이고 한번 만들어놓으면 classpath 를 옮기지 않는 한 컴파일이 불필요하다는 것이었죠.
(이건 배치파일도 마찬가지였지만, 배치파일은 분실하면 새로 만들어줘야 했기 때문에; package 명이 길면 길수록 입력하기에 불편하니까)

음.., Java webstart 기능을 이용해서 현장 PC에서는 웹서버에서 jar 로 묶인 최신 클래스 덩어리를 내려받을 수 있게 했습니다. (실시간 업데이트)

--
즐 Tux~

익명 사용자의 이미지

답변 감사드립니다. 이해하는데 많은 도움이 되었습니다.

이제 좀 생각이 정리되는것 같습니다.

비가 많이 오는데 별일 없으시길 바라겠습니다.

익명 사용자의 이미지

> class 는 안되는데 jar 에 대해서는 되는것이 좀 부자연스러워보이긴하나(jar 이 class 파일의 압축을 목적으로 사용된다는 측면에서..)

jar 파일의 용도는 자바 어플리케이션이나 라이브러리를 "배포" 하기 위한 것이지 압축하기 위한 것이 아닙니다.
그냥 class 파일을 클릭해서 실행한다면 jvm 옵션이나 라이브러리 클래스패스등을 처리하기 어렵습니다.
jar는 manifest 파일을 통해서 그런 옵션들을 처리할 수 있지요.
jar를 클릭해야 실행되는 것이 자연습니다.

> eclipse 와 netbeans 에서 제공하는 laucher 를 만드는 기능 또한, 그것이 pure 한 java 의 실행파일 포맷이라고 생각되어지지는 않습니다.
> 차라리, 아마도 Dos 의 배치파일을 이용하거나 exe 로 'java 파일이름' 을 수행하는 프로그램을 포함시키는것이 가장나은 pure 한 방법이라 생각되어지네요.

pure 가 무슨 뜻이지요?
eclipse 와 netbeans 에서 제공하는 laucher 가 말씀하신 것처럼 exe를 제공하는 것입니다.
링크한 프로젝트 중 launcher4j 와 lzpack 역시 윈도 환경에서는 exe를 제공합니다.

> 아직 까지 몇개의 실제 예를 보지못해서 어떤방법이 real industry 에서 사용되는지 모르겠네요.

위에 말씀드린 것들이 real industry 에서 사용되는 방법입니다.

익명 사용자의 이미지

> 참고로 java 로 제작한 파일이 class 로 변환된이후 이것을 exe 로 변환해주는 방법등을 통해 exe 파일로 변환 하는 내용은 알고있습니다.
이것에 대해서는 별로 좋지않은 방법이라 생각하여 , 이것을 제외하고 질문합니다.

혹시 오해하실까봐 덧붙이면 말씀드린 launcher exe 들은 말 그대로 launcher 입니다.
java XXX 를 실행하는 역할을 할 뿐이지요.
인용한 문장에서 말씀하신 자바 클래스 자체를 exe 로 변환하는 기술은 사실상 쓰이지 않습니다.
오래전에 그런 시도들이 좀 있었고, gcj 가 지금도 비슷한 시도를 하고 있지만 거의 안쓰인다고 보시면 됩니다.

HotPotato의 이미지

귀찮지만 알집의 확장자 연결 설정에서 jar 을 선택 해제해주면 됩니다.
그리고 이 때 jar 은 main 함수가 존재하는 애플리케이션을 감싼 상황일 때 실행되는 것이지, 그저 라이브러리 뿐인 jar 까지 실행되는 것은 아닙니다.

--
즐 Tux~

익명 사용자의 이미지

답변해주신 모든 분들 감사드립니다.

일일히 답변에 감사하다고 적는것이 좋은 방법이아닌것같아서 이렇게 하겠습니다.

답변하나하나 모두 도움이되었습니다.

감사드립니다.

비오는데 별일 없으시길 바랍니다.^^

익명 사용자의 이미지

pe 파일(exe, dll, sys, ocx 등)도 그 자체만으로 실행되는 것이 아닙니다.
윈도우즈 운영체제의 로더에 의해서 수행되는 것 입니다.
즉 exe파일 단독적으로는 수행이 안되며 pe 파일 로더에 의해서 메모리 올라가서 수행이 되는 것 입니다.
윈도우즈에 종속되는 것이죠(윈도우즈안에서만 수행가능)

자바측면(큰 관점에서)에서 위의 글을 보면 jvm 이 윈도우와 class가 exe와 매칭된다고 할 수 있습니다.

exe가 윈도우즈안에서만 수행되듯이....class도 jvm안에서만 수행됩니다.

익명 사용자의 이미지

때때로 이렇게 생각하는것은 , 어떤 고민을 해결하는데 큰 도움이 될때가 있다는것을 압니다.
생각하는 관점에 대하여 추가적인 지식을 주셔서 감사드립니다.