Java 애플리케이션을 배포하는 가장 좋은 방법은 무엇입니까? [닫은]


115

Java는 제가 선택한 프로그래밍 언어 중 하나입니다. 내 응용 프로그램을 최종 사용자에게 배포하더라도 항상 문제가 발생합니다.

사용자에게 JAR을 제공하는 것이 내가 원하는만큼 항상 사용자 친화적 인 것은 아니며 Java WebStart를 사용하려면 웹 서버를 유지해야합니다.

Java 애플리케이션을 배포하는 가장 좋은 방법은 무엇입니까? Java 애플리케이션이 사용자 컴퓨터에 아티팩트를 설치해야하는 경우 어떻게합니까? 좋은 Java 설치 / 패키징 시스템이 있습니까?


Java WebStart는 CD 또는 네트워크 드라이브와 같은 파일 시스템과 같은 모든 URL에서 사용할 수 있습니다. 당연히 그렇게 많이주지는 않습니다. 참고 : eclipse는 설치 프로그램을 사용하지 않으며 압축을 풀고 실행하기 만하면됩니다. 아마도 설치 프로그램이 필요하지 않을 것입니다.
Peter Lawrey

1
요즘에는 이러한 Java WebStart 애플리케이션을 Google Application Engine에 배포하는 것이 매우 간단합니다.
Thorbjørn Ravn Andersen

6
이 질문이 닫혀서 안타깝습니다. 나는 '주로 의견에 근거한'이유에 동의하지 않는다. 제공된 답변은 의견이 아니라 경험을 기반으로합니다. 저는 항상 경험을 바탕으로 좋은 답변을 환영합니다. 역사에서 배울 수없는 사람들은 그것을 반복 할 운명입니다.
bouvierr 2015

jlink (JDK 9에 도입 됨)를 사용하여 Java 애플리케이션을 배포 할 수 있습니다. JDK와 함께 제공됩니다. 전용 JRE가 구축됩니다. 클라이언트 시스템에 Java를 설치할 필요는 없습니다.
blueray

답변:


89

배포 요구 사항에 따라 다양한 솔루션이 있습니다.

  1. 단지 항아리를 사용하십시오. 이는 사용자에게 올바른 Java 버전이 설치되어 있다고 가정합니다. 그렇지 않으면 사용자에게 "클래스 파일 형식 버전"예외가 발생합니다. 회사 내부 배포에는 괜찮습니다.

  2. launch4j 및 NSIS와 같은 설치 프로그램을 사용하십시오. 이것은 사용자가 자바 런타임을 제거하는 것과 같은 어리석은 일을 할 수 있지만 훨씬 더 많은 제어를 제공합니다. 이것은 아마도 가장 널리 사용되는 접근 방식이며 현재 제가 사용하는 방식입니다.

  3. Webstart를 사용하십시오. 이것은 또한 사용자가 올바른 Java 버전을 설치했다고 가정하지만 진행하기가 훨씬 쉽습니다. 내 경험에 따르면 엄격하게 제어되는 인트라넷 환경에서는 괜찮지 만 이상한 오류가 많기 때문에 대규모 배포에서는 고통이됩니다. Java 1.7의 새로운 플러그인 기술로 더 좋아질 수 있습니다.

  4. Excelsior JET와 같은 네이티브 코드 컴파일러를 사용하여 실행 파일로 배포하거나 설치 프로그램으로 래핑합니다. 비싸고 일반적으로 약간 이전 버전의 Java와 연결되며 동적 클래스 로딩에는 약간의 고통이 있지만 지원 번거 로움을 최소화해야하는 대규모 배포에는 매우 효과적입니다.


4
Webstart에 대한 참고 사항 : 사용자가 석기 시대 (예 : 1.2)가 아닌 Java 버전이 설치되어있는 한 webstart는 프로그램에 필요한 최신 Java 버전을 다운로드하여 설치하도록 지시 할 수 있습니다. 아직. .jnlp 파일 구문을 살펴보십시오. 물론 처리하는 클라이언트에 따라 부적절 할 수있는 Java를 사용하고 있음을 여전히 매우 눈에 띄게 표시합니다. 이러한 경우에는 실제로 일종의 "네이티브"설치 프로그램 / 파일 형식을 사용하고 구현 세부 정보를 최대한 숨겨야합니다.
Daniel Schneller 2009-06-23

10
나는 Webstart를 좋아하지 않습니다. Java / Sun 브랜딩이 너무 많습니다. 제대로 작동하도록하기는 어렵습니다. 코드 서명을 설정하는 것은 가치가있는 것보다 더 많은 문제이며 사용자는 어쨌든 보안 이점과 메시지를 이해하지 못합니다. 사용자 시스템에서 무언가를하고 싶다면 무서운 경고를 없애기 위해 코드 서명 인증서에 대한 비용을 지불해야합니다. 문제를 일으킬 수있는 많은 복잡한 캐싱을 수행합니다. 아마도 OSGi 또는 곧 출시 될 Java 모듈은 유사한 자동 업데이트 이점을 제공 할 것입니다. # 2의 변형을 사용하고 Ant에서 모두 Mac 용 DMG / Packager를 만듭니다.
Calm

당신이 제안한대로 NSIS를 사용했습니다. 나는 또한 launch4j를 보았다. 둘 다 사용하는 것이 좋습니다.
jacknad

1
@JackN NSIS는 설치 프로그램 생성기입니다. Launch4j는 자바 프로그램을보다 쉽게 ​​시작 / 시작할 수 있도록 특별히 설계되었습니다. 기능에는 일부 중복이 있지만 문제의 다른 부분을 대상으로합니다.
Noel Grandin

+1 좋은 답변. Excelsior JET에 대한 경험이 있습니까? x86 아키텍처 만 지원하고 실시간 jar 라이브러리를로드 할 수 없습니까?
KJW

6

고급 설치 프로그램을 사용하면 Java 앱을 Windows 실행 파일로 쉽게 패키징 할 수 있으며 설정할 수있는 방식이 매우 유연합니다. Windows 클라이언트에 자바 애플리케이션을 배포하는 것이 가장 쉬운 방법이라는 것을 알았습니다.


5

JSmooth 는 jar 파일을 표준 Windows 실행 파일로 묶는 간단한 프로그램입니다. 필요한 JVM을 구성하고 애플리케이션과 함께 번들로 제공하거나 아직 설치되지 않은 경우 다운로드 옵션을 제공 할 수있는 간단한 GUI가 함께 제공됩니다. exe 파일을있는 그대로 보내거나 가능한 종속성과 함께 압축 할 수 있습니다 (또는 시작시 프로그램이 네트워크에서 추가 종속성을 다운로드하도록 허용). 그것은 또한 맥주와 연설에서와 같이 무료이며, 좋은 것일 수도 있고 아닐 수도 있습니다.


4

대상 사용자가 얼마나 정교한 지에 따라 다릅니다. 대부분의 경우 Java 기반 앱을 실행하고 있다는 사실로부터 분리하려고합니다. 올바른 작업을 수행하고 (시작 메뉴 항목, 실행기 생성, 프로그램 추가 / 제거 등으로 등록) 이미 Java 런타임을 번들로 제공하는 기본 설치 프로그램을 제공합니다 (사용자가이를 알거나 신경 쓸 필요가 없음). 크로스 플랫폼 설치 도구 인 BitRock InstallBuilder 를 제안하고 싶습니다.. Java 기반은 아니지만 일반적으로 Java 애플리케이션을 패키징하는 데 사용됩니다. Ant와 쉽게 통합 할 수 있으며 Unix / Linux / Mac 등에서 Windows 설치 프로그램을 빌드 할 수 있습니다. 생성 된 설치 프로그램은 기본이기 때문에 자동 추출 단계 나 JRE가 대상 시스템에 이미있을 필요가 없습니다. 즉, 설치 프로그램이 더 작아지고 골칫거리가 줄어 듭니다. 또한 오픈 소스 프로젝트에 대한 무료 라이선스가 있음을 언급하고 싶습니다.



3

실제 GUI가있는 최종 사용자 응용 프로그램 인 경우 프로그램을 작성한 언어 (Java)를 무시하고 선택한 각 플랫폼에 대한 기본 설치 프로그램을 사용해야합니다. Mac 사용자는 .dmg를 원하고 Windows에서는 .msi 또는 .exe 설치 프로그램을 사용하는 것이 좋습니다. Windows에서는 InstallShield 또는 InstallAnywhere보다 덜 불쾌하기 때문에 NullSoft의 NSIS를 선호합니다. OSX에서는 이미 존재하는 JVM을 믿을 수 있습니다. Windows에서는 필요한 경우 확인하고 설치해야합니다. Linux 사용자는 Java GUI 응용 프로그램을 실행하지 않으며 실행 가능한 .jar로 수행 할 작업을 아는 사람은 거의 없습니다.


3
정말? 리눅스 사람들은 GUI 응용 프로그램을 실행하지 않습니까? 그럼 나는 그의 프로그램이 그들에게 전체 토론의 논쟁을 일으키는 데 쓸모가 없다고 생각합니다.
Matt

@Matt 왜 원래 응용 프로그램이 GUI 응용 프로그램이라고 가정합니까? Linux에 많은 명령 줄 Java 응용 프로그램을 설치했으며 .deb 또는 .rpms로 제공되는 응용 프로그램은 특히 감사합니다.
Ry4an Brase

1
원래 제목은 GUI입니다. 또한 웹 스타트가 시작된 경우 GUI 애플리케이션 일 가능성이 높습니다. 마지막으로, 리눅스 사용자가 GUI 애플리케이션을 사용하지 않는다는 것은 완전히 사실이 아닙니다.
Matt

나는 리눅스 사람들이 GUI 애플리케이션을 실행하지 않는다고 말하지 않았다. 나는 그들이 "Java GUI"애플리케이션을 실행하지 않을 것이라고 말했다. 그리고 NetBeans와 Eclipse ( "몇몇은 실행 가능한 jar로 무엇을할지 알고있다"에서 다뤘다) 밖에서 널리 사용되는 단일 애플리케이션을 생각할 수 없다. Linux의 Java 애플리케이션 (Open Office 등은 C ++이며 플러그인에 대해서만 Java 사용).
Ry4an Brase

SQLDeveloper에 대해 들어 보셨습니까? 아니면 오라클 관리 도구가 있습니까? 모두 Java로 코딩 됨 (sqldeveloper가 .exe로 번들링되지만 Java 임)
Matt

3

내가 사용하지 않은 있지만 NSIS 자신을 (널 소프트 스크립트 가능한 설치 시스템), 필요한 JRE가 대상 시스템에 설치되어 있는지 여부를 확인합니다 스크립트를 설치있다.

코드 예제실제 설치 프로그램 페이지에서 다음과 같은 많은 샘플 스크립트를 사용할 수 있습니다 .

(실제로 스크립트를 사용하지 않았으므로 보증으로 받아들이지 마십시오.)


2

내 프로젝트와 그 종속성을 단일 jar 파일로 패키징하는 방법이 필요했습니다.

Maven2 Assembly 플러그인을 사용하여 필요한 것을 찾았습니다. Maven2 Assembly 플러그인

이것은 one-jar 의 기능을 복제하는 것처럼 보이지만 추가 구성이 필요하지 않습니다.


1

간단한 Java 앱의 경우 Jar 's를 사용합니다. 사용자가 클릭 할 수있는 하나의 파일 (Windows)을 배포하는 것은 매우 간단합니다.

java -jar jarname.jar

IMHO, jar는 단순성이 주요 요구 사항 일 때가는 길입니다.


초보자에게 이것을 시도하면 잘 작동하지 않을 것입니다.
rhody

1

이클립스 RCP 응용 프로그램을 개발합니다. 일반적으로 Eclipse 애플리케이션을 시작하기 위해 실행 가능한 런처가 포함되어 있습니다. 올바른 Java 버전을 사용할 수 있도록 / jre 하위 디렉토리의 애플리케이션 폴더에 Java 가상 머신을 포함합니다.

그런 다음 사용자의 컴퓨터에 설치하기 위해 Inno Setup으로 패키지화합니다.


1

Java 애플리케이션을 배포하는 가장 좋은 방법은 무엇입니까? Java 애플리케이션이 사용자 컴퓨터에 아티팩트를 설치해야하는 경우 어떻게합니까? 좋은 Java 설치 / 패키징 시스템이 있습니까?

내 경험상 ( 여러 옵션 평가에서 ) install4j 는 좋은 솔루션입니다. 모든 플랫폼에 대한 기본 설치 프로그램을 생성하며 특히 Java 앱 설치에 적합합니다. 자세한 내용 은 웹 사이트의 " 기능 "을 참조하십시오 .

하지만 install4j는 상용 도구입니다. 특히 요구 사항이 비교적 간단하다면 (애플리케이션을 배포하고 일부 아티팩트를 설치하기 만하면 ) 무료 옵션 (예 : izPack 또는 이미 언급 한 Lauch4j )을 포함하여 다른 많은 좋은 옵션이 있습니다 . 그러나 당신은 최선의 방법 을 요청했고, 내 현재 지식으로는 install4j가 특히 더 크거나 복잡한 Java (EE) 앱을 배포하기위한 것입니다.


Mac OS에서 JVM 5.0을 강제 실행하는 방법을 알고 있습니까? Windows를 사용하면 JRE를 번들로 묶을 수 있지만 Mac에서는 다른 기본 JVM이 구성되어있을 수 있습니다. 나는 확실히 명시 적으로 당신이 원하는 특정의 JVM 버전 ... 사용하도록 강제하는 방법을 모르겠어요 그래서
스테판 Grenier의

@Stephane, 실제로 install4j를 사용하여 OS X 설치 프로그램을 만들지는 않았지만 유연한 JRE 번들링 / 감지 옵션을 고려할 때 문제가되지 않아야한다고 생각합니다. 그들에 대한 자세한 내용은이 대답에 링크를 확인 : stackoverflow.com/questions/995881/...
Jonik

Mac은 Java 앱 번들 생성을 지원하므로 info.plist에서 JRE를 다음과 같이 지정할 수 있습니다. <key> JVMVersion </ key> <string> 1.5 + </ string> 플러스를 제거하여 특정 버전을 요구할 수 있습니다. . 이것이 내가하는 방법이지만 install4j를 사용하지 않습니다. 웹에서 Mac App Budles를 만드는 방법을 설명하는 페이지가 많이 있습니다. 또한 limewire 또는 vuze (자바 앱)가 어떻게 수행하는지 살펴 보는 것이 좋습니다. 오픈 소스이기 때문에 앱 번들과 dmg 파일을 빌드하는 데 사용하는 빌드 스크립트를 볼 수도 있습니다!
Cal

0

가장 좋은 대답은 플랫폼에 따라 다릅니다. Windows 배포의 경우 one-jarlaunch4j 조합을 사용하여 좋은 결과를 얻었습니다 . 내 빌드 환경 (대부분 개미 스크립트)을 올바르게 설정하는 데 약간의 시간이 걸렸지 만 이제는 상당히 고통스럽지 않습니다.


0

내 관점에서 우수한 배포 메커니즘은 ClickOnce 또는 WebStart 기술 과 같은 것을 사용하는 것 입니다. 버전을 서버에 배포하기 만하면 버전이 릴리스 될 때 클라이언트에 자동으로 전달됩니다. 또한 Eclipse RCP 플랫폼에는 WebStart가 수행하는 작업을 수행하는 UpdateManager가 포함되어 있습니다.

빌드에 Maven2를 사용하고 있으므로 배포는 케이크 조각에 불과합니다. 빌드 된 jar를 서버의 위치에 복사하고 필요한 경우 jnlp 파일을 업데이트하면 완료됩니다.


0

installanywhere는 좋지만 비싸다-좋은 무료 제품을 찾지 못했습니다.


몇 가지 무료 제품 (및 훨씬 더 합리적인 가격의 상업용 제품 포함)을 포함한 InstallAnywhere 대안은 다음을 참조하십시오. stackoverflow.com/questions/759855/…
Jonik

-2

다른 종속 jar, 구성 파일 및 문서와 함께 jar 파일을 run.bat / run.sh와 함께 압축합니다. 최종 사용자는 원하는 위치에 압축을 풀고 필요한 경우 run.bat를 편집 할 수 있어야합니다 (대부분의 경우 편집하지 않고 실행되어야 함). 시작 메뉴, 바탕 화면, 시스템 트레이 등에 항목을 만들려는 경우 설치 프로그램이 유용 할 수 있습니다.

사용자로서 나는 압축을 풀고 일종의 설치를 실행하는 것을 선호합니다 (시작 메뉴 항목 없음). 그러나 IT 산업 이외의 사람들은 다른 선호도를 가질 수 있습니다. 따라서 응용 프로그램이 주로 개발자를 대상으로하는 경우 zip-run.bat 경로와 일반 대중을위한 응용 프로그램은 설치 프로그램을 사용하여 설치할 수 있습니다.


이것은 초보자에게는 작동하지 않습니다.
rhody
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.