Ejecutables hechos en Java. (Desde Unix)
Para hacer ejecutables con Java y luego lanzarlos desde un sistema operativo debemos seguir unos pasos:
Aunque se pueden ejecutar clases java compiladas (archivos.class) directamente , si queremos ejecutar una aplicacion java un poco mas grande, por ejemplo un conjunto de clases empaquetadas en el archivo estandar de java .JAR (archivo.jar) debemos seguir estos pasos para crear la aplicacion java:
1.Crear una clase que sera el punto de entrada y lo primero que se ejecutara. Esta clase debe tener un metodo llamado main. Un ejemplo de esta clase seria algo asi:

La clase esta en el paquete com.dppware.exe,
2.Cuando empaquetemos las clases dentro del .jar, necesitamos especificar en el archivo META-INF/MANIFEST.MF cual sera la clase que queremos ejecutar cuando se intente ejecutar el .jar.
Asi este archivo, en este caso tendra este contenido:

Ahora cuando empaquetemos el .jar (ya sea desde eclipse (export>jar file>...) o con maven tendremos un jar con este contenido
archivo.jar ------com
----dppware
----exe
---Executable.class
------META-INF
----MANIFEST.MF
En este punto ya tenemos un archivo.jar ejecutable que lo primero que hara al ejecutarse es entrar por la Main-Class especificada en el archivo MANIFEST.MF (archivo descriptivo de aplicacion java estandar)
Vamos a rellenar un poco el archivo java, para que nos pida unos datos por consola, asi vemos como podemos interactuar con el programa:
Quedara algo asi:

Pide datos por consola y los escribe despues (una chorradilla...)
Ahora dependiendo del sistema operativo en el que queramos ejecutar el archivo java, necesitamos crear un archivo nativo ejecutable (para windows crearemos un archivo.bat que ejecute el java y en unix crearemos un archivo.sh que llame a nuestro jar.)
Este sera su contenido:
unixEXE.sh
java -cp ./archivo.jar:$CLASSPATH com.dppware.exe.Executable
Con esta linea, nuestro programa run.sh llamara a nuestro jar , llamado archivo.jar (que debe estar en su mismo directorio) y este al comenzar a ejecutarse se llamara a la clase especificada en el MANIFEST.MF
(si necesitas tener persmisos para ejecutar el sh creado: ~$ chmod 766 archivo.jar )

CLASSPATH
Hay veces que queremos que nuestro jar ejecutable use algun .jar especifico y necesitamos establecer el classpath cuando se ejecute el jar para que pueda hacer uso de esas librerias.
Para ello en el .sh hemos visto que lo arrancabamos con la opcion "-cp" (classpath)
Al arrancar java -cp le decimos a la jre que añada los jars que le especifiquemos en el classpath para la ejecucion de nuestro jar.
Este es un ejemplo , en el que nuestro jar necesita de ojdbc.jar para conectar a una bbdd.
La forma de arrancar el programa seria la siguiente:
java -cp ./archivo.jar:$CLASSPATH:./path/to/jar/ojdbc.jar com.dppware.exe.Executable
(los .jar se separan por ":")
Resumen:
1.Ejecutar una clase java en modo manual :
java -jar com.dppware.exe.Executable
2 .Si la class va dentro de un jar, necesitamos especificar que use un classpath que apunte a nuestro jar donde esta la clase:
java -cp ./archivo.jar com.dppware.exe.Executable (busca la clase com.dpp...Executable dentro de los jars que le decimos (-cp ./archivo.jar) que use de classpath
3.Si queremos meter varios jar, buscara la clase a ejecutar dentro de los archivos jar que le especifiquemos,si la ejecucion depende de otras clases que estan en alguno de los jar los sabra encontrar:
java -cp ./archivo.jar:./path/to/arch2.jar com.dppware.exe.Executable (buscara y tendras en el classpath las clases dentro de esos jars y la clase Executable se puede encontrar dentro de cualquiera de los jars
Si prefieres puedes usar la variable de entorno CLASSPATH, para usar los jars que tengas en la maquina y apuntados en tu variable de entorno: quedaria asi:
java -cp ./archivo.jar:$CLASSPATHcom.dppware.exe.Executable
aqui estoy usando archivo.jar que no esta en el classpath, pero ademas todas las librerias que haya en nuestra variable de entorno $CLASSPATH
CREAR EL EJECUTABLE EN JAVA
Aunque se pueden ejecutar clases java compiladas (archivos.class) directamente , si queremos ejecutar una aplicacion java un poco mas grande, por ejemplo un conjunto de clases empaquetadas en el archivo estandar de java .JAR (archivo.jar) debemos seguir estos pasos para crear la aplicacion java:
1.Crear una clase que sera el punto de entrada y lo primero que se ejecutara. Esta clase debe tener un metodo llamado main. Un ejemplo de esta clase seria algo asi:
La clase esta en el paquete com.dppware.exe,
2.Cuando empaquetemos las clases dentro del .jar, necesitamos especificar en el archivo META-INF/MANIFEST.MF cual sera la clase que queremos ejecutar cuando se intente ejecutar el .jar.
Asi este archivo, en este caso tendra este contenido:
Ahora cuando empaquetemos el .jar (ya sea desde eclipse (export>jar file>...) o con maven tendremos un jar con este contenido
archivo.jar ------com
----dppware
----exe
---Executable.class
------META-INF
----MANIFEST.MF
En este punto ya tenemos un archivo.jar ejecutable que lo primero que hara al ejecutarse es entrar por la Main-Class especificada en el archivo MANIFEST.MF (archivo descriptivo de aplicacion java estandar)
Vamos a rellenar un poco el archivo java, para que nos pida unos datos por consola, asi vemos como podemos interactuar con el programa:
Quedara algo asi:
Pide datos por consola y los escribe despues (una chorradilla...)
CREAR EL EJECUTABLE DEL SISTEMA OPERATIVO
Ahora dependiendo del sistema operativo en el que queramos ejecutar el archivo java, necesitamos crear un archivo nativo ejecutable (para windows crearemos un archivo.bat que ejecute el java y en unix crearemos un archivo.sh que llame a nuestro jar.)
Este sera su contenido:
unixEXE.sh
java -cp ./archivo.jar:$CLASSPATH com.dppware.exe.Executable
Con esta linea, nuestro programa run.sh llamara a nuestro jar , llamado archivo.jar (que debe estar en su mismo directorio) y este al comenzar a ejecutarse se llamara a la clase especificada en el MANIFEST.MF
(si necesitas tener persmisos para ejecutar el sh creado: ~$ chmod 766 archivo.jar )
CLASSPATH
Hay veces que queremos que nuestro jar ejecutable use algun .jar especifico y necesitamos establecer el classpath cuando se ejecute el jar para que pueda hacer uso de esas librerias.
Para ello en el .sh hemos visto que lo arrancabamos con la opcion "-cp" (classpath)
Al arrancar java -cp le decimos a la jre que añada los jars que le especifiquemos en el classpath para la ejecucion de nuestro jar.
Este es un ejemplo , en el que nuestro jar necesita de ojdbc.jar para conectar a una bbdd.
La forma de arrancar el programa seria la siguiente:
java -cp ./archivo.jar:$CLASSPATH:./path/to/jar/ojdbc.jar com.dppware.exe.Executable
(los .jar se separan por ":")
Resumen:
1.Ejecutar una clase java en modo manual :
java -jar com.dppware.exe.Executable
2 .Si la class va dentro de un jar, necesitamos especificar que use un classpath que apunte a nuestro jar donde esta la clase:
java -cp ./archivo.jar com.dppware.exe.Executable (busca la clase com.dpp...Executable dentro de los jars que le decimos (-cp ./archivo.jar) que use de classpath
3.Si queremos meter varios jar, buscara la clase a ejecutar dentro de los archivos jar que le especifiquemos,si la ejecucion depende de otras clases que estan en alguno de los jar los sabra encontrar:
java -cp ./archivo.jar:./path/to/arch2.jar com.dppware.exe.Executable (buscara y tendras en el classpath las clases dentro de esos jars y la clase Executable se puede encontrar dentro de cualquiera de los jars
Si prefieres puedes usar la variable de entorno CLASSPATH, para usar los jars que tengas en la maquina y apuntados en tu variable de entorno: quedaria asi:
java -cp ./archivo.jar:$CLASSPATHcom.dppware.exe.Executable
aqui estoy usando archivo.jar que no esta en el classpath, pero ademas todas las librerias que haya en nuestra variable de entorno $CLASSPATH
Comentarios
Publicar un comentario