16 agosto 2008

Java: ejecutando programa con más de una clase

Ayer les escribí el código de dos clases, Ejemplo y Ejemplo2 (el artículo fue este), y ahora los escribí en la compu para ejecutarlo. Quiero compartir contigo mi experiencia desde la linea de comando.

El proceso consiste en usar el programa javac para compilar el archivo con extensión java (el del código fuente). Esto me genera un archivo con la extensión class (el famoso P-Code del que hablamos aquí). Luego usas el programa java (que arranca la máquina virtual) para ejecutar el archivo class. No hay problema si tu programa consiste en una sola clase: solo tienes que escribir java nombre-archivo.class y asunto arreglado.

Sin embargo el código de ayer usaba dos clases lo cual genera dos archivos .class. Hmm... si le doy java Ejemplo, me marca error porque no tiene la función main() y si escribo java Ejemplo2, me dice que no tiene la clase Ejemplo. ¡Ah que lata! Y todo por querer usar la línea de comando... pero como decidí no renunciar e irme a un ambiente gráfico (todavía), me puse a averiguar que onda y encontré la solución.

En primer lugar tengo que arrejuntar todos los archivos .class en un solo archivo JAR (Java ARchives, o archivos Java). Esto se hace con el programita jar que viene en la misma carpeta que el java y javac. La sintaxis completa la puedes ver si escribes jar en la línea de comando y eso hace innecesario que lo escriba aquí. Yo escribí la siguiente instrucción:

jar cf EjemploClases.jar Ejemplo.class Ejemplo2.class

Lo cual significa que haga un nuevo archivo llamado EjemploClases.jar que va a contener el contenido de Ejemplo.class y Ejemplo2.class. Para ver el contenido del archivo , escribo la siguiente instrucción:

jar tf EjemploClases.jar

Esta es el texto que me aparece cuando ejecuto esta extensión:


Si te fijas, aparece Ejemplo.class y Ejemplo2.class tal y como nos lo esperábamos pero, ¿qué onda con el META-INF y el MANIFEST.MF? es un archivo que le permite al archivo JAR agregar funcionalidad que incluye firmas electrónicas, control de versiones y otras tantas cosas. Solamente puede haber un archivo manifest en un archivo y contiene información acerca de los archivos que están empaquetados en el archivo JAR. Al crear un archivo JAR, se crea un archivo de manifest de manera automática. Tengo que modificar este manifest default para que corra mi programa, específicamente decirle cuál de las clases va a ser el que se ejecuta (el que tiene el main()). Para hacer esto, primero se tiene que hacer un archivo de texto que contenga la información que quiero agregar al manifest y luego uso la herramienta jar con la opción m para agregarlo. Hice un archivo en el bloc de notas, llamado Manifest.txt, que contenía lo siguiente:

Main-class: Ejemplo2

Toma en cuenta que el último renglón tiene que terminar con un enter, si no, no jala. Luego escribo el comando:

jar cfm EjemploClases.jar Manifest.txt Ejemplo.class Ejemplo2.class

Ahora al ejecutar el archivo rar, se ejecuta la función main de la clase Ejemplo2. Esta es la instrucción:

java -jar EjemploClases.jar

¡Y listo! Todo funciona de maravilla. Bueno, la verdad es que hice tanto argüende (nota cultural totalmente fuera del tema: argüende se deriva del verbo argüir del latín ʽarguereʼ que significa alegar o dar argumentos a favor o en contra) para que apareciera un pinchurriento -14 en la pantalla, pero lo importante es que esta es la manera de empaquetar clases para su ejecución. Los archivos JAR también son usados para desplegar aplicaciones (proceso conocido como depoyment) con el Java Web Start (para aplicaciones correr como aplicaciones de forma local en las computadoras de los clientes) o el Java Plug-in (para aplicaciones que se ejecuten en un navegador).

Seguimos en contacto...

Publicar un comentario
Related Posts Plugin for WordPress, Blogger...