Java to Exe (ejecutable)

ORIGINAL DE darkilopez
Bien, todo parte de que Java no genera ejecutables de ningún tipo, recuerden que lo único generado es código intermedio (bytecode), es decir, archivo con extensión .class.
Existen 2 formas de hacer correr una aplicación Java en una máquina distinta en la que se desarrolló, pero antes, sea cual sea la forma en que la despliegue, necesito:

1. Tener acceso al JRE: hago hincapié en que no dije "instalar", basta con tener acceso a un directorio que contenga el JRE, más precisamente, al archivo java.exe (en windows) o java (en linux).
2. Empaquetar mi aplicación en uno o varios JAR (Java ARchive, más detalles en próximos posts). Si bien este punto no es necesario, es muy recomendable.

Forma 1 - Chapada a la antigua

Esta primer forma consiste en correr la aplicación por medio de la línea de comandos (antiguo DOS). Esta forma es más habitual para los usuarios Linux. Consiste en lo siguiente:
Si nuestra aplicación se llama MiPrograma.jar y quiero correrla desde la línea de comandos, necesitaré escribir lo siguiente:
C:>\\java -jar MiPrograma.jar
Esto hará que se ejecute la aplicación (si está bien empaquetada). Este comando se puede escribir en un archivo con extensión .bat/.sh para poder tener un acceso directo y hacerlo un poco más visual.

Forma 2 - Creación a mano de un archivo .exe

Podríamos hacer uso de otro lenguaje que sí genere código ejecutable (VB, C, C++, Pascal, etc.) para que se invoque automáticamente a la línea de comandos y se ejecute la aplicación, o, podríamos utilizar un programa que lo haga por nosotros.
De este tipo de programas hay varios, pero me interesa uno en especial, aunque todavía es beta, tiene muy buen funcionamiento y me ha servido mucho, se llama JSmooth y pueden descargarlo del siguiente link.

El primer proyecto que se arma con este programa suele ser un poco complicado, por eso voy a dejar un pequeño tutorial de cómo usarlo.
Lo que tiene de bueno este programa es que se puede generar un ejecutable que contenga a la aplicación o que utilice un jar serparado, además, se puede configurar ampliamente la máquina virtual de Java, incluso se puede añadir mensajes específicos al usuario para que la instale.
Como si eso fuera poco, es posible incorporar todo el JRE de Java para que la aplicación la utilice accediendo a un directorio específico. Eso está muy bueno, ya que pueden prescindir de obligar al usuario que instale el JRE, directamente lo podemos distribuir con nuestra aplicación.

De esta manera, podemos crear un .exe (entorno Windows) sin muchos problemas, incluso podemos correr la aplicación directamente desde un CD o un pendrive. Muy recomendable.

JSmooth: http://jsmooth.sourceforge.net/

Ahora el tutorial de Jsmooth.
-----------------------------------------------------------------------------------------
¿Cómo crear un ejecutable con JSmooth?
Paso 1: Elegir el esqueleto del proyecto
Este primer punto depende de la aplicación para la cual queremos crear un ejecutable. Para este tutorial vamos a suponer que nuestra aplicación es un bloc de notas y está empaquetado en un archivo llamado NotePad.jar

JSmooth nos ofrece 2 posibilidades, aplicaciones de consola (línea de comandos) y aplicaciones de ventanas. En nuestro caso, elegimos la segunda opción.

Descripción de las opciones:
# Message: Es el mensaje que se le va a mostrar al usuario cuando la máquina virtual (JRE) no se encuentre.
# URL: Indica la URL desde donde el usuario puede bajar el JRE.
# Launch Java app…: Sirve para lanzar la aplicación Java en otro proceso distinto.
# Debug console: Si lo marcamos, se mostrará la línea de comados de Windows con el detalle de todo lo que pasa por detrás. Útil para saber cómo funciona JSmooth.

Paso 2: Configurar Ejecutable

Descripción de las opciones:
# Executable Binary: Es el directorio de destino donde se va a crear el archivo con extensión .exe En nuestro ejemplo, el directorio de destino es c:\Aplicacion\ y el nombre de nuestro ejecutable será NotePad.exe
# Executable Icon: Sirve para seleccionar un icono para nuestro ejecutable.
# Current Directory: Especifica un directorio distinto a tomar como “raíz”
de la aplicación. Nos conviene dejarlo vacío.

Noten que haciendo clic en los signos de pregunta, obtenemos más información acerca de la opción.

Paso 3: Configurar la aplicación Java


Descripción de las opciones:
# Classpath: Deberá ser la primera opción de todas. Aquí seleccionamos el archivo jar que empaqueta nuestra aplicación. Si nuestra aplicación hace uso de otras librerías
externas, debemos especificarlas aquí también.
# Main Class: Debemos seleccionar aquí la clase principal (la que contiene el void main)
# App Arguments: Si nuestra aplicación puede recibir parámetros de ejecución, este es lugar para especificarlos.
# Embedded jar: Este punto es importante. Nosotros podemos dejar el archivo jar en forma externa dentro de nuestra aplicación, o incorporarlo dentro del mismo ejecutable. Lo más recomendable es dejarlo aparte.

Descripción de las opciones:
# Minimum JVM Version: Es el número de versión mínimo de la máquina virtual. En nuestro caso, debe ser la 1.5 (Tiger)
# Maximum JVM Version: Versión máxima de la máquina virtual. Vacío es lo más recomendable.
# JVM Bundle: Este punto es importante. Es aquí donde podemos especificar que nuestra aplicación va a llevar la máquina virtual de Java incorporada. Lo que deben hacer aquí es localizar un directorio generalmente llamado jre1.x.x y copiarlo entero al directorio del proyecto.
# JVM Search Sequence: Si no tienen marcada la opción anterior, pueden especificarle a JSmooth el orden de búsqueda de máquina virtual.

Paso 4: Últimos retoques

Generalmente este punto puede ser salteado, no lo utilizamos a menos que estemos muy seguros de lo que hacemos.

Descripción de las opciones:
# Maximum Memory: Nos permite especificar cuanta memoria debería
pedir la JVM al sistema operativo como máximo.
# Inicial Memory Allocation: Si ponemos un valor alto aquí, nuestra aplicación puede llegar a tener un mejor rendimiento al iniciarse. Es interesante para experimentar.
# Java Properties: Es posible especificar aquí propiedades adicionales a java, no de la JVM propiamente, sino de aquellas a las que accedemos en tiempo de ejecución por medio de System.getProperty();

Paso 5: Generación

Lo primero que deben hacer es guardar el proyecto.
A continuación, podemos ir al menú Project -> compile para generar el ejecutable propiamente dicho:

Y listo, ya tenemos nuestro ejecutable.

No response to “Java to Exe (ejecutable)”