Ejemplos java y C/linux

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace https://old.chuidiang.org

Hacer ficheros jar

QUÉ SON LOS FICHEROS JAR

Cuando tenemos un programa grande, con varios paquetes y clases, ya sabemos cómo organizarlo, compilarlo y ejecutarlo. Sin embargo, para pasárselo a los amiguetes o instalarlo en otro ordenador es un poco rollo. Tenemos que llevarnos directorios enteros, con los ficheros que hay dentro y demás.

Lo ideal es meter todos estos ficheros y directorios en un único fichero comprimido. Java, con su comando jar, que está en el directorio bin de donde tengamos java,  nos permite hacer esto. Empaqueta todo lo que le digamos (directorios, clases, ficheros de imagen o lo que queramos) en un único fichero de extensión .jar. Un fichero de extensión .jar es similar a los .zip de Winzip, a los .rar de Winrar o a los ficheros .tar del tar de unix. De hecho, con Winzip o Winrar se puede ver y desempaquetar el contenido de un fichero .jar

Java nos da además otra opción, podemos ejecutar las clases del fichero .jar sin tener que desempaquetarlo. Símplemente podemos darle a nuestro amiguete el fichero .jar con todo dentro y ya está listo para ejecutar.

Vamos a ver cómo hacer todo esto.

CÓMO CREAR UN FICHERO JAR

Para crear un fichero jar, en primer lugar tenemos que tener todo ya perfectamente preparado y compilado, funcionando.

Si las clases de nuestro programa no pertenecen a paquetes, simplemente debemos meter las clases en el fichero .jar Para ello, vamos al directorio donde estén los ficheros .class y ejecutamos el siguiente comando

$ cd directorio_con_los_class
$ jar -cf fichero.jar fichero1.class fichero2.class fichero3.class

La opción "c" indica que queremos crear un fichero.jar nuevo. Si ya existía, se machacará, así que hay que tener cuidado. La opción "f" sirve para indicar el nombre del fichero, que va inmediatamente detrás. En nuestro caso, fichero.jar. Finalmente se pone una lista de ficheros .class (o de cualquier otro tipo) que queramos meter en nuestro jar. Se pueden usar comodines, estilo *.class para meter todos los .class de ese directorio.

Si las clases de nuestro porograma pertenecen a paquetes, debemos meter en nuestro jar la estructura de directorios equivalente a los paquetes entera. Para ello, nos vamos al directorio padre de donde empiece nuestra estructura de paquetes. En el caso de nuestro HolaMundo con paquete, debemo meter el directorio prueba completo. El comando a ejecutar es este.

$ cd directorio_padre_de_prueba
$ jar -cf fichero.jar prueba

Las opciones son las mismas, pero al final en vez de las clases, hemos puesto el nombre del directorio. Esto meterá dentro del jar el directorio y todo lo que hay debajo.

Otra opción sería meter los .class, pero indicando el camino relativo para llegar e ellos

$ cd directorio_padre_de_prueba
$ jar -cf fichero.jar prueba/HolaMundo.class

En windows la barra va al revés...

VER QUÉ HAY DENTRO DE UN JAR

Para comprobar si nuestro jar está bien hecho, podemos ver su contenido. El comando es este

$ jar tf fichero.jar

La opción "t" indica que queremos un listado del fichero.jar. La opción "f" es igual que antes. Esto nos dará un listado de los class (y demás ficheros) que hay dentro, indicando en que directorio están. Deberíamos comprobar en ese listado que están todas las clases que necesitamos y la estructura de directorios concuerda con la de paquetes.

MODIFICAR UN JAR

Para cambiar un fichero dentro de un jar o añadirle uno nuevo, la opción del comando jar es "u". Si el fichero existe dentro del jar, lo reemplaza. Si no existe, lo añade.

Por ejemplo, si hacemos un cambio en nuestro HolaMundo.class con paquete y lo recompilamos, podemos reemplazarlo así en el jar

$ jar uf fichero.jar prueba/HolaMundo.class

CÓMO EJECUTAR UN JAR

Para ejecutar un jar, símplemente debemos poner el fichero jar en el CLASSPATH. Ojo, hay que poner el fichero.jar, NO el directorio en el que está el fichero.jar. Este suele ser un error habitual al empezar, pensar que basta con poner el directorio donde está el jar. Para los .class, basta poner el directorio, para los .jar hay que poner el fichero.jar

El path para indicar la ubicación del fichero puede ser absoluto o relativo al directorio en el que ejecutemos el comando java. El comando para ejecutar una clase dentro de un jar, en nuestro caso del HolaMundo con paquete, suponiendo que estamos en el directorio en el que está el fichero.jar, sería este

$ java -cp ./fichero.jar prueba.HolaMundo
Hola Mundo

Simplemente, en la opción -cp del CLASSPATH hemos puesto el fichero.jar con su PATH relativo. Detrás hemos puesto el nombre de la clase, completo, con su paquete deltante. Nuevamente, en windows la barra de directorio va al revés.

EL FICHERO DE MANIFIESTO

Ejecutar así tiene una pega. Además de acordarse de poner la opción -cp, hay que saber el nombre de la clase que contiene el método main(). Además, si nuestro programa es muy grande, tendremos varios jar, tanto nuestros como otros que nos bajemos de internet o de donde sea. La opción -cp también puede ser pesadita de poner en ocasiones.

Una opción rápida que a todos se nos ocurre es crearse  un pequeño fichero de script/comandos en el que se ponga esta orden. Puede ser un fichero .bat de windows o un script de unix. Este fichero debe acompañar al fichero.jar y suponiendo que estén en el mismo directorio, su contenido puede ser este

java -cp ./fichero.jar prueba.HolaMundo

Para ejecutarlo, se ejecuta como un fichero normal de comandos/script. Si el fichero se llama ejecuta.sh o ejecuta.bat, según sea unix o windows:

$ ./ejecuta.sh
Hola Mundo
C:\> ejecuta.bat
Hola Mundo

Sin embargo, java nos ofrece otra posibilidad de forma que no tengamos que hacer este fichero. Simplemente, en un fichero de texto metemos una línea en la que se ponga cual es la clase principal. Este fichero se conoce como fichero de manifiesto y su contenido puede ser este

Main-Class: prueba.HolaMundo

Cuando contruimos el jar, debemos incluir este fichero de una forma especial. Por ejemplo, si el fichero lo llamamos manifiesto.txt y lo ponemos en el directorio donde vamos a construir el jar, el comando para hacerlo sería este

$ jar cmf manifiesto.txt fichero.jar prueba/HolaMundo.class

En windows, nuevamente, la barra al revés. Al comando de crear jar le hemos añadido la opción "m" para indicar que vamos a añadir un fichero de manifiesto. Hemos añadido además el fichero manifiesto.txt. El orden de las opciones "mf" es importante. El fichero de manifiesto y el fichero.jar se esperan en el mismo orden que pongamos las opciones. En el ejemplo, como hemos puesto primero la ocpión "m", debemos poner manifiesto.txt delante de fichero.jar. El resto de ficheros son los que queremos empaquetar.

Una vez construido, se ejecuta fácilmente. Basta con poner

$ java -jar fichero.jar

La opción "-jar" indica que se va a ejecutar el fichero.jar que se ponga a continuación haciendo caso de su fichero de manifiesto. Como este fichero de manfiesto dice que la clase principal es prueba.HolaMundo, será esta la que se ejecute.

De esta forma nos basta con entregar el jar y listo. El comando para arrancarlo es sencillo.

Es más, en windows, si lo configuramos para que los ficheros jar se abran con java y la opción -jar, bastará con hacer doble click sobre ellos para que se ejecuten.

Ahora puedes seguir a cómo se lee el teclado desde java o bien volver al "Hola Mundo" con paquetes.

Estadísticas y comentarios

Numero de visitas desde el 4 Feb 2007:

Aviso Legal