문제

GUI 렌더링용 Eclipse SWT 라이브러리를 사용하여 데스크탑용 Java로 애플리케이션을 작성 중입니다.나는 SWT가 Java가 데스크탑에서 수용을 위한 가장 큰 장애물을 극복하는 데 도움이 된다고 생각합니다.즉, 데스크탑의 다른 앱에 속하는 것처럼 보이는 일관되고 반응성이 뛰어난 인터페이스를 Java 애플리케이션에 제공하는 것입니다.하지만 애플리케이션을 패키징하는 것은 여전히 ​​문제라고 생각합니다.

OS X는 기본적으로 기본 애플리케이션 번들에 Java 앱을 래핑하기 위한 쉬운 메커니즘을 제공하지만 사용자가 보기 흉한 배치 파일을 실행하거나 .jar을 클릭할 필요가 없는 Windows/Linux용 앱을 생성하는 것은 여전히 ​​번거롭습니다.아마도 사용자가 기술에 좀 더 능숙할 가능성이 있는 Linux에서는 그런 문제가 아닐 수도 있지만 Windows에서는 그/그녀가 실행할 수 있는 일반 .exe를 갖고 싶습니다.

Java용 .exe 생성 도구를 사용해 본 경험이 있는 사람이 있습니까?JSmooth를 사용해 보았지만 다양한 문제가 있었습니다.Visual Studio를 실행하고 직접 출시하기 전에 더 나은 솔루션이 있습니까?

편집하다: 아마도 상업용 솔루션에 많은 돈을 쓸 수 없다는 점을 말씀드리고 싶습니다.

도움이 되었습니까?

해결책

pauxu의 답변에 대한 후속 조치를 취하기 위해 내 프로젝트에서 launch4j와 NSIS를 사용하고 있으며 이를 사용하는 방법을 보여주는 것이 도움이 될 것이라고 생각했습니다.제가 Windows에서 하고 있는 작업은 다음과 같습니다.그런데 Mac용 .app 및 .dmg를 만들고 있지만 Linux용으로 무엇을 해야 할지 아직 파악하지 못했습니다.

launch4j 및 NSIS의 프로젝트 사본

내 프로젝트에는 "vendor" 디렉토리가 있고 그 아래에는 "launch4j" 및 "nsis"에 대한 디렉토리가 있습니다.각각에는 각 응용 프로그램의 설치 사본이 있습니다.다른 사람들이 두 제품을 모두 설치하고 각각을 가리키도록 일종의 환경 변수를 설정하도록 강요하는 것보다 프로젝트에 로컬 복사본을 두는 것이 더 쉽다는 것을 알았습니다.

스크립트 파일

또한 내 프로젝트에 대한 다양한 구성/스크립트 파일을 보관하는 "scripts" 디렉터리가 내 프로젝트에 있습니다.먼저 launch4j.xml 파일이 있습니다.

<launch4jConfig>
  <dontWrapJar>true</dontWrapJar>
  <headerType>gui</headerType>
  <jar>rpgam.jar</jar>
  <outfile>rpgam.exe</outfile>
  <errTitle></errTitle>
  <cmdLine></cmdLine>
  <chdir>.</chdir>
  <priority>normal</priority>
  <downloadUrl>http://www.rpgaudiomixer.com/</downloadUrl>
  <supportUrl></supportUrl>
  <customProcName>false</customProcName>
  <stayAlive>false</stayAlive>
  <manifest></manifest>
  <icon></icon>
  <jre>
    <path></path>
    <minVersion>1.5.0</minVersion>
    <maxVersion></maxVersion>
    <jdkPreference>preferJre</jdkPreference>
  </jre>
  <splash>
    <file>..\images\splash.bmp</file>
    <waitForWindow>true</waitForWindow>
    <timeout>60</timeout>
    <timeoutErr>true</timeoutErr>
  </splash>
</launch4jConfig>

그리고 NSIS 스크립트 rpgam-setup.nsis가 있습니다.파일 이름을 지정하는 데 VERSION 인수를 사용할 수 있습니다.

; The name of the installer
Name "RPG Audio Mixer"

!ifndef VERSION
    !define VERSION A.B.C
!endif

; The file to write
outfile "..\dist\installers\windows\rpgam-${VERSION}.exe"

; The default installation directory
InstallDir "$PROGRAMFILES\RPG Audio Mixer"

; Registry key to check for directory (so if you install again, it will 
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\RPG_Audio_Mixer" "Install_Dir"

# create a default section.
section "RPG Audio Mixer"

    SectionIn RO

    ; Set output path to the installation directory.
    SetOutPath $INSTDIR
    File /r "..\dist\layout\windows\"

    ; Write the installation path into the registry
    WriteRegStr HKLM SOFTWARE\RPG_Audio_Mixer "Install_Dir" "$INSTDIR"

    ; Write the uninstall keys for Windows
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "DisplayName" "RPG Audio Mixer"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "UninstallString" '"$INSTDIR\uninstall.exe"'
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoModify" 1
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoRepair" 1
    WriteUninstaller "uninstall.exe"

    ; read the value from the registry into the $0 register
    ;readRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion

    ; print the results in a popup message box
    ;messageBox MB_OK "version: $0"

sectionEnd

Section "Start Menu Shortcuts"
  CreateDirectory "$SMPROGRAMS\RPG Audio Mixer"
  CreateShortCut "$SMPROGRAMS\RPG Audio Mixer\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
  CreateShortCut "$SMPROGRAMS\RPG AUdio Mixer\RPG Audio Mixer.lnk" "$INSTDIR\rpgam.exe" "" "$INSTDIR\rpgam.exe" 0
SectionEnd

Section "Uninstall"

    ; Remove registry keys
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer"
    DeleteRegKey HKLM SOFTWARE\RPG_Audio_Mixer

    ; Remove files and uninstaller
    Delete $INSTDIR\rpgam.exe
    Delete $INSTDIR\uninstall.exe

    ; Remove shortcuts, if any
    Delete "$SMPROGRAMS\RPG Audio Mixer\*.*"

    ; Remove directories used
    RMDir "$SMPROGRAMS\RPG Audio Mixer"
    RMDir "$INSTDIR"

SectionEnd

개미 통합

위의 작업을 처리하기 위해 Ant 빌드 파일(build.xml)에 몇 가지 대상이 있습니다.먼저 Ant에게 launch4j의 Ant 작업을 가져오라고 전화합니다.

<property name="launch4j.dir" location="vendor/launch4j" />
<taskdef name="launch4j" 
    classname="net.sf.launch4j.ant.Launch4jTask"
    classpath="${launch4j.dir}/launch4j.jar:${launch4j.dir}/lib/xstream.jar" />

그런 다음 래퍼 실행 파일을 생성하기 위한 간단한 대상이 있습니다.

<target name="executable-windows" depends="jar" description="Create Windows executable (EXE)">
    <launch4j configFile="scripts/launch4j.xml" outfile="${exeFile}" />
</target>

그리고 설치 프로그램을 만드는 또 다른 대상은 다음과 같습니다.

<target name="installer-windows" depends="executable-windows" description="Create the installer for Windows (EXE)">
    <!-- Lay out files needed for building the installer -->
    <mkdir dir="${windowsLayoutDirectory}" />
    <copy file="${jarFile}" todir="${windowsLayoutDirectory}" />
    <copy todir="${windowsLayoutDirectory}/lib">
        <fileset dir="${libraryDirectory}" />
        <fileset dir="${windowsLibraryDirectory}" />
    </copy>
    <copy todir="${windowsLayoutDirectory}/icons">
         <fileset dir="${iconsDirectory}" />
    </copy>
    <copy todir="${windowsLayoutDirectory}" file="${exeFile}" />

    <mkdir dir="${windowsInstallerDirectory}" />

    <!-- Build the installer using NSIS -->
    <exec executable="vendor/nsis/makensis.exe">
        <arg value="/DVERSION=${version}" />
        <arg value="scripts/rpgam-setup.nsi" />
    </exec>
</target>

그 상단 부분은 설치 프로그램에 필요한 파일을 임시 위치에 복사하고 나머지 부분은 설치 프로그램을 만들기 위해 모든 파일을 사용하는 스크립트를 실행합니다.

다른 팁

우리 회사에서는 Launch4J exe 파일을 생성하고, NSIS SWT 애플리케이션을 사용하여 설치 프로그램을 생성합니다.

우리는 여러 상업용 응용 프로그램에서 수년 동안 사용해 왔으며 쌍은 잘 작동합니다.

아마도 당신은 살펴 봐야 할 것입니다 이즈팩.나는 몇 년 전에 매우 훌륭한 설치 프로그램을 만들었고 그들이 여전히 그것을 개선하고 있을 것이라고 확신합니다.문서, 바이너리 및 클릭 가능한 링크를 설치하여 애플리케이션을 시작할 수 있습니다. IIRC.

저는 무료로 이용했어요 Launch4J Windows에서 Java 프로그램에 대한 사용자 정의 실행 프로그램을 생성합니다.무료와 결합 NSIS 설치 프로그램 Windows 사용자를 위한 멋진 패키지를 만들 수 있습니다.

편집하다: SWT를 사용하는 것을 보지 못했습니다.내 앱에서는 Swing만 사용했기 때문에 SWT에서도 작동하는지 모르겠습니다.

단지 호출만 하는 작은 프로그램을 C/C++로 작성하는 것을 고려해 보셨나요? CreateProcess jar(또는 클래스) 파일로 Java VM을 시작하려면 어떻게 해야 합니까?

당신은 얻을 수 비주얼 C++ 익스프레스 아주 쉽게 시작 프로그램을 구성할 수 있습니다.이렇게 하면 친숙한 아이콘을 추가하는 것도 쉬워집니다.

애플리케이션을 다음으로 변환하는 것을 고려해보세요. 이클립스 RCP.에 쓰여 있습니다 SWT, Eclipse IDE에는 모든 주요 플랫폼에 대한 실행 파일을 생성하는 패키징 도구가 포함되어 있습니다.Windows의 경우 코드가 포함된 zip 또는 폴더를 생성할 수 있습니다.일반적인 설치 경험을 위해 NSIS를 사용하겠습니다.실제로는 패키지 생성기 Eclipse에서 지원하는 모든 플랫폼에 대한 공통 설치 프로그램을 생성하기 위해 Eclipse에서 프로젝트를 수행합니다.

생각해 보셨나요? 자바 웹 스타트? 여기 Java Web Start를 사용하여 SWT 애플리케이션을 배포하기 위한 튜토리얼입니다.

Install4J.무료는 아니지만 그만한 가치가 있습니다.재판을 한번 시도해 보세요

이제 Netbeans를 통해 이 작업을 수행할 수 있습니다!정말 쉽고 완벽하게 작동합니다.확인해 보세요 이것 Netbeans 웹사이트의 튜토리얼.

나는 똑같은 일을 겪었고 모든 무료 옵션이 그다지 좋지 않다는 것을 알았습니다.직접 작성하시면 될 것 같습니다.누군가 효과가 있는 무료/저렴한 옵션을 갖고 있는지 알고 싶습니다.

제가 고려하고 있던 또 다른 옵션은 다음과 같습니다.기본 런처를 처음부터 작성하는 대신 Eclipse에는 자체 런처용 소스 코드가 함께 제공되며 이는 아마도 내 앱에 맞게 용도가 변경될 수 있습니다.

Sun이 JDK에 이와 유사한 것을 포함하지 않았다는 것은 유감스러운 일입니다.

Launch4J에 대한 또 다른 투표는 오늘 아침 내 프로젝트 중 하나와 통합하기 위해 개미 작업을 작성했습니다.정말 효과가 좋은 것 같아요

나는 과거에 JSmooth를 사용해 본 적이 있으며 여전히 운이 좋습니다.UI는 꽤 버그가 많지만 구성 파일을 빌드하는 데 한 번만 사용하고 그 후에는 Ant에서 빌드합니다.

JSmooth에 어떤 문제가 있나요?

JSMooth는 프로덕션 환경에서 매우 잘 작동했습니다. 여기서는 먼저 one-jar(eclipse용 fat jar 플러그인)를 사용하여 단일 jar을 생성한 다음 JSmooth로 래핑했습니다.

(필요한 경우 JRE 설치를 요청할 수 있는 단일 파일의 무설치 배포를 원했습니다.)

아무도 안쓰는줄 알았을 정도로 효과가 좋았어요 :)

우리 도구를 사용해 볼 수도 있습니다. BitRock InstallBuilder.기본 애플리케이션이지만 많은 고객이 이를 사용하여 데스크톱 Java 애플리케이션을 패키징합니다.JRE를 번들링하고 런처 등을 생성하는 경우사용자는 Java 애플리케이션을 설치하고 있다는 사실조차 알 필요가 없습니다.크로스 플랫폼이므로 Windows와 Mac(및 Linux, Solaris 등)용 설치 프로그램을 생성할 수 있습니다. 다른 게시물에서 언급한 install4j 도구와 마찬가지로 상용 도구입니다. 하지만 우리는 오픈 소스 프로젝트를 위한 무료 라이센스와 microISV/소기업 등을 위한 특별 할인을 제공합니다.이메일을 보내주세요.또한 이는 설치 프로그램 도구이므로 단일 실행 파일만 찾는 경우 요구 사항을 해결하지 못한다는 점을 강조하고 싶었습니다.

우리 회사에서는 Windows 배포판으로 launch4J와 NSIS를 사용하고 Debian 배포판으로 jdeb을 사용하며 일반 운영 체제로는 Java Web Start를 사용합니다.이것은 꽤 잘 작동합니다.

시도해 보세요 설치재머.내가 사용해 본 것 중 최고였습니다.무료이며 강력합니다. 개인 및 상업용으로도 충분합니다.

고급 설치 프로그램을 고려해 보셨나요?

나는 특히 Windows와 Mac에서 그것을 여러 번 사용했습니다.스크립팅이나 Ant가 필요하지 않습니다.모든 GUI.매우 간단하고 이해하기 쉽습니다.무료는 아니지만 모든 페니의 가치가 있습니다.

- 관리자로 시작
- 파일 연결
- 사용자 정의 설치 테마 + 내장 테마
- JRE가 포함된 패키지
- 설치 위치
- 네이티브 스플래시 화면 구현
- 서비스 및 설치 이벤트를 이벤트로 생성할 수 있습니다.
- 전제조건
- JRE 최소 버전과 최대 버전

그리고 훨씬 더.그리고 오해하지 마세요. 저는 그 친구들과 아무런 관계도 없습니다...그들의 앱은 정말 굉장합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top