studio sobre para mentor desarrollo crear con colección avanzado aula aplicaciones java windows swt executable software-distribution

java - sobre - manual android studio avanzado



Empaquetar aplicaciones Java para el escritorio de Windows/Linux (18)

Estoy escribiendo una aplicación en Java para el escritorio utilizando la biblioteca Eclipse SWT para la representación de GUI. Creo que SWT ayuda a Java a superar el mayor obstáculo para la aceptación en el escritorio: es decir, proporcionar una aplicación Java con una interfaz consistente y receptiva que se parece a la que pertenece a cualquier otra aplicación en su escritorio. Sin embargo, creo que empaquetar una aplicación sigue siendo un problema.

OS X nativamente proporciona un mecanismo fácil para envolver aplicaciones Java en paquetes de aplicaciones nativas, pero producir una aplicación para Windows / Linux que no requiera que el usuario ejecute un feo archivo de proceso por lotes o haga clic en .jar sigue siendo una molestia. Posiblemente ese no sea un problema en Linux, donde es probable que el usuario sea un poco más conocedor de la tecnología, pero en Windows me gustaría tener un .exe regular para que se ejecute.

¿Alguien ha tenido alguna experiencia con alguna de las herramientas de generación de .exe para Java que están disponibles? Intenté con JSmooth pero tuve varios problemas con eso. ¿Hay una solución mejor antes de descifrar Visual Studio y rodar la mía?

Editar: Tal vez debería mencionar que no puedo gastar mucho dinero en una solución comercial.


¿Has pensado en Java Web Start ? Aquí hay un tutorial específicamente para implementar una aplicación SWT con Java Web Start.


Pasé por lo mismo y descubrí que todas las opciones gratuitas no eran muy buenas. Parece que estarás escribiendo el tuyo. Me interesaría ver si alguien tiene una opción gratuita / barata que funcione


Install4J . No es gratis, pero vale la pena. Dale una oportunidad al ensayo


¿Ha considerado escribir un pequeño programa en C / C ++ que simplemente llame a CreateProcess para iniciar la máquina virtual de Java con el archivo jar (o clase)?

Puede obtener Visual C ++ Express y armar el programa de inicio con bastante facilidad. Esto haría que sea más fácil agregar un ícono amigable también.


Otra opción que estaba considerando: en lugar de escribir un iniciador nativo desde el principio, Eclipse viene con el código fuente de su propio iniciador, y esto podría ser reutilizado para mi aplicación.

Es una pena que Sun nunca haya incluido algo similar en el JDK.


Tal vez deberías echarle un vistazo a IzPack . Creé un instalador muy bueno hace algunos años y apostaría que todavía lo están mejorando. Permite la instalación de documentos, binarios y un enlace cliqueable para iniciar la aplicación IIRC .


He usado el Launch4J gratuito para crear un iniciador personalizado para mis programas Java en Windows. Combinado con el instalador NSIS gratuito, puede crear un buen paquete para sus usuarios de Windows.

Editar: No vio que usas SWT. No sé si también funciona con SWT, porque solo utilicé Swing en mis aplicaciones.


Considere la posibilidad de convertir su aplicación a Eclipse RCP . Está escrito en SWT , y el Eclipse IDE contiene herramientas de empaque que generan ejecutables para todas las plataformas principales. Para Windows, puede generar un archivo comprimido o una carpeta que contenga su código. Para una experiencia de instalación común, usaría NSIS. En realidad, existe un proyecto generador de paquetes en eclipse para crear instaladores comunes para todas las plataformas compatibles con eclipse.


En mi compañía usamos Launch4J para crear el archivo exe y NSIS para crear el instalador, con aplicaciones SWT.

Lo hemos usado durante años en varias aplicaciones comerciales y el par funciona bien.


Otro voto para Launch4J, acaba de escribir una tarea de hormiga esta mañana para integrarse con uno de mis proyectos. Parece funcionar muy bien


He usado JSmooth en el pasado, y todavía tengo suerte con eso. La interfaz de usuario es bastante problemática, pero solo la uso para construir el archivo de configuración una vez, y luego compilo a partir de Ant después de eso.

¿Qué problemas tienes con JSmooth?


JSMooth nos ha funcionado muy bien en un entorno de producción, donde primero generé un solo contenedor con un solo frasco (complemento de frasco de grasa para eclipsar) y luego lo envolví con JSmooth.

(Tenga en cuenta que quería una distribución sin instalación de un solo archivo, lo que podría implicar la instalación de JRE si fuera necesario).

Funcionó tan bien que pensé que nadie lo estaba usando :)


Es posible que desee probar nuestra herramienta, BitRock InstallBuilder . Aunque es una aplicación nativa, muchos de nuestros clientes la usan para empaquetar aplicaciones de escritorio en Java. Si agrupa el JRE y crea el iniciador, etc., el usuario ni siquiera necesita saber que está instalando una aplicación Java. Es multiplataforma, por lo que puedes generar instaladores tanto para Windows como para Mac (y Linux, Solaris, etc.) Como la herramienta install4j mencionada en otra publicación, es una herramienta comercial, pero tenemos licencias gratuitas para proyectos de código abierto y descuentos especiales para microISV / pequeñas empresas, etc. solo envíenos un correo electrónico. También quería enfatizar que esta es una herramienta de instalación, por lo que no abordará sus necesidades si solo busca un archivo ejecutable.


En mi compañía usamos launch4J y NSIS para la distribución de Windows, y jdeb para la distribución de Debian, y Java Web Start para el sistema operativo general. Esto funciona bastante bien.


Para dar seguimiento a la respuesta de pauxu, estoy utilizando launch4j y NSIS en un proyecto mío y pensé que sería útil mostrar cómo los estoy usando. Esto es lo que estoy haciendo para Windows. Por cierto, estoy creando .app y .dmg para Mac, pero todavía no he resuelto qué hacer con Linux.

Proyecto Copias de launch4j y NSIS

En mi proyecto tengo un directorio de "proveedores" y debajo tengo un directorio para "launch4j" y "nsis". Dentro de cada uno hay una copia de la instalación para cada aplicación. Me resulta más fácil tener una copia local para el proyecto en lugar de forzar a otros a instalar ambos productos y configurar algún tipo de variable de entorno para señalar cada uno.

Archivos de script

También tengo un directorio "scripts" en mi proyecto que contiene varios archivos de configuración / script para mi proyecto. Primero está el archivo 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>

Y luego está el script de NSIS rpgam-setup.nsis. Puede tomar un argumento VERSIÓN para ayudar a nombrar el archivo.

; 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

Integración Ant

Tengo algunos objetivos en mi Ant buildfile (build.xml) para manejar lo anterior. Primero le digo a Ant que importe las tareas Ant de launch4j:

<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" />

Luego tengo un objetivo simple para crear el ejecutable contenedor:

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

Y otro objetivo para hacer el instalador:

<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>

La parte superior de eso simplemente copia los archivos necesarios para el instalador a una ubicación temporal y la segunda mitad ejecuta el script que usa todo para crear el instalador.


Por favor, prueba InstallJammer . El mejor que he usado. Libre y poderoso. Y suficiente para uso personal y comercial.


¡Ahora puede hacer esto a través de Netbeans! Es realmente fácil y funciona perfectamente. Mira este tutorial en el sitio web de Netbeans.


¿Has considerado el instalador avanzado?

Lo he usado especialmente, especialmente para Windows y Mac. No se requiere scripting o Ant. Toda la GUI. Muy simple y comprensible. No es gratis, pero vale la pena cada centavo.

- Lauch como administrador
- Asociación de archivos
- Temas personalizados de instalación + en temas integrados
- Paquete con JRE
- Instalar ubicación
- Implementación de pantalla de Splash nativo
- Puede crear eventos y eventos de instalación
- Prerrequisitos
- Versión mínima de JRE y versión máxima

Y mucho más. Y no lo malinterprete, no tengo conexiones con los tipos ... su aplicación es simplemente increíble.