## Crear un fichero JAR

### El comando de la herramienta Jar

El formato básico del comando para crear un fichero JAR es:

    jar cf fichero-jar fichero(s)-de entrada

Echemos un vistazo a las opciones y argumentos utilizados en este comando:

- La opción c indica que quieres crear un fichero JAR.
- La opción f indica que quieres que la salida vaya a un fichero en vez de a stdout.
- fichero-file es el nombre que quieres para el fichero JAR resultante. Puedes utilizar cualquier nombre de fichero. Por convención, a los ficheros JAR se les da la extensión .jar, aunque no es obligatorio.
- El argumento fichero(s)-de entrada es una lista delimitada por espacios de uno o más ficheros que deben ser situados dentro de tu fichero JAR. Este argumento puede tener simbolo del comodín *. Si alguno de los fichero(s)-de entrada, es un directorio, el contenido de dicho directorio se añadirá al fichero JAR recursivamente.

Las opciones c y f pueden aparecer en cualquier orden, pero no debe existir ningún espacio entre ellas.

Este comando generará un fichero JAR comprimido y lo situará en el directorio actual. El comando también generá un fichero de manifiesto, por defecto. META-INF/MANIFEST.MF, para el archivo JAR.

Podrías añadir cualquiera de estas opciones adicionales a las opciones cf del comando básico:

- v - produce un salida verbosa en stderr (en versión 1.1) o stdout (en versión 1.2) mientras se construye el fichero. La salida verbosa te dice el nombre de cada fichero añadido al fichero JAR.
- 0 - indica que no quieres que el fichero JAR sea comprimido.
- M - indica que no se debería producir el fichero de manifiesto por defecto.
- m - utilizada para incluir información de manifiesto desde un fichero de manifiesto existente. El formato utilizado por esta opción es:

      jar cmf existing-manifest output-file input-file(s)

En la versión 1.1 el formato JAR sólo soporta nombres de ficherso ASCII. La versión 1.2 añade soporte para nombres codificados en UTF8.

### Un ejemplo

Veamos un ejemplo. El JDKTM incluye una demo del applet TicTacToe. Esta demo contiene ficheros de clases, ficheros de audio e imágenes, todos almacenados en un directorio llamado TicTacToe que tiene esta estructura:

                          TicTacToe
                 _____________|______________
                |             |              |
          TicTacToe.class   audio         images
                              |              |

Los subdirectorios audio e images contienen ficheros GIF y de sonido utilizados por el applet.

Para empaquetar esta demo en un sólo fichero JAR llamado TicTacToe.jar, deberías ejecutar este comando desde el directorio TicTacToe:

    jar cvf TicTacToe.jar TicTacToe.class audio images

Los argumentos audio e images representan directorios, por eso la herramienta JAR los situará recursivamente a ellos y sus contenidos en el fichero JAR. El fichero JAR generado TicTacToe.jar estará situado en el directorio TicTacToe. Como el comando utiliza la opción v para salida verbosa, podrás ver esta salida:

    adding: TicTacToe.class (in=3825) (out=2222) (deflated 41%)
    adding: audio/ (in=0) (out=0) (stored 0%)
    adding: audio/beep.au (in=4032) (out=3572) (deflated 11%)
    adding: audio/ding.au (in=2566) (out=2055) (deflated 19%)
    adding: audio/return.au (in=6558) (out=4401) (deflated 32%)
    adding: audio/yahoo1.au (in=7834) (out=6985) (deflated 10%)
    adding: audio/yahoo2.au (in=7463) (out=4607) (deflated 38%)
    adding: images/ (in=0) (out=0) (stored 0%)
    adding: images/cross.gif (in=157) (out=160) (deflated -1%)
    adding: images/not.gif (in=158) (out=161) (deflated -1%)

Puedes ver desde esta salida que el fichero JAR TicTacToe.jar está comprimido. La herramienta JAR comprime los ficheros por defecto. Puedes desactivar la compresión utilizando la opción 0 (cero), con lo que el comando se parecería a esto:

    jar cvf0 TicTacToe.jar TicTacToe.class audio images

Podrías querer evitar la compresión, por ejemplo, para incrementar la velocidad a la que el fichero JAR podría ser cargado por un navegador. Los ficheros JAR sin comprimir generalmente pueden cargarse más rápido que los comprimidos porque no necesitan descomprimir los ficheros durante la descarga.

La herramienta JAR aceptará argumentos que utilicen el síbolo de comodín *. Como no existen ficheros en el directorio TicTacToe que no se quieran añadir, podrías utilizar este comando alternativo para construir el fichero JAR:

    jar cvf TicTacToe.jar *

Una nota final: aunque la salida verbosa no lo indique, la herramienta Jar añade automáticamente un fichero de manifiesto al archivo JAR en la localización META-INF/MANIFEST.MF.

Ozito