Construcción de Software II Guía 25 – Package Jar Manifest 142 Este saca un listado con todos los ficheros y directorios que hay en el fichero *.jar. Al listar cada fichero .class, pone delante el directorio/directorios en los que está metido (y que debe coincidir con su package si todo es correcto). Práctica 140 Fichero JAR ejecutable Cómo hacer para ejecutar una clase por defecto almacenada en un fichro JAR al hacer doble click en Windows o mediante línea de comandos DOS. Al crear un fichero JAR, se crea un único fichero MANIFEST con datos del fichero JAR dentro del propio fichero en la ruta 'META-INF\MANIFEST.MF'. Para que un fichero JAR sea ejecutable, habrá que modificar el fichero MANIFEST.MF, y añadir las siguientes líneas: Modificaciones MANIFEST.MF Main-Class: 'nombre de la clase principal' Path: .\'nombre del fichero jar'.jar Práctica 141 Queremos crear un fichero JAR con el nombre myjar.jar con la clase MyClass.class que será la que contenga el método main a ejecutar. 1. Con un editor de texto, creamos el fichero 'mymanifest.mf' en la misma ruta donde se encuentre el fichero MyClass.class, que contenga las siguientes líneas: mymanifest.mf Main-Class: MyClass Path: .\myjar.jar 2. Desde la ruta con todos los ficheros, ejecutar el siguiente comando: jar jar -cvfm misClases.jar mymanifest.mf misClases.class 3. Comprobar que en Windows haciendo doble click en el fichero JAR generado, la clase MyClass.class se ejecuta, 4. Por simbolo del sistema Ejecución java -jar myjar.jar Práctica 142 Crear un archivo jar con JCreator Entrar a Configure>Options>Tools..le doy al Boton "new".. aparece un menu y clickeas "Create jar File". Dobleclic para cambiar nombre. En Arguments escriba: cfm miClase.jar c:\miClase\META-INF\manifiesto.mf miClase.class (Agregue todos los demas archivos que componen el programa) Con winrar abres el jar..primero le borras todos los ficheros con extension .java (el jar no los utiliza solo se requieren los .class) El mas importante es el archivo manifest.mf que se encuentra dentro de la carpeta META-INF.. sacamos ese archivo lo editamos. Para que el jar se ejecute necesita el nombre de la clase que posee el main, si no existe.lo escribes: Manifest-Version: 1.0 Main-Class: miClase Created-By: 1.6.0 (Sun Microsystems Inc.) lo guardas y lo reeemplazas por el antiguo archivo manifest.mf. Listo el archivo .jar Dobleclic para ejecutarlo. www.dariolara.com Guía 25 – Package Jar Manifest Construcción de Software II 139 Java en Sistema D.O.S Introducción El lenguaje Java se puede ejecutar en una IDE (Interface Development Environment) como Jcreator, Eclipse, Netbeans, Bluej, etc., la cual integra el editor para digitar el codigo fuente, el debugger para depurar el software, la JVM (Java Virtual Machine) y el sistema de compilacion que convierte el codigo fuente (.java) en ByteCodes (codigo binario) o codigo objeto (.class) Proceso en sistema Los programas Java tambien se pueden ejecutar en ambiente de sistema (DOS) directamente, asi: 1. Digitar los codigos en un bloc de notas 2. Se compila con el programa javac.exe 3. Se ejecuta con el programa java.exe Cuando se trabaja con programas java se requiere definir la ruta de las clases para que el sistema operativo busque las clases digitadas. Classpath Cuando empezamos con java es bastante habitual obtener el error "class not found" al intentar ejecutar nuestro programa, aunque estamos bastante seguros de que todo está como debía. Vamos a suponer que tenemos un programa java compuesto por varias clases. En ninguna parte de nuestras clases hemos puesto package y lo tenemos todo compilado en un mismo directorio, por ejemplo ..../usuarios/MI_PROYECTO en windows). Supongamos además que nuestro método main() está en el fichero clasePrincipal.class. Si ejecutamos nuestro programa en simbolo de sistema con java, escribimos: java clasePrincipal El comando java busca las clases que necesita en unos determinados directorios y ficheros .jar. Por defecto los buscará en los directorios propios de java y en el directorio en el que se esté ejecutando el comando java. Si estamos en el directorio indicado, tenemos una versión de java moderna y repito, no hemos puesto package por ningún lado, todo esto funcionará correctamente. Para que funcione todo correctamente se deben definir las rutas de clase: A. En el simbolo del sistema C:\>classpath c:\archivos de programa\java\bin B. Para las IDE se requiere declarar la ruta en el path environment del icono de Sistema Panel de control Icono de sistema Propiedades del sistema Variables de entorno Ruta declarada ClassPath www.dariolara.com Construcción de Software II Guía 25 – Package Jar Manifest 140 package Todo lo contado ahora es sin poner package en ningún sitio de nuestro código. Si hacemos, por ejemplo, una clase con package package Practicas public class miClase { ... } Esto "crea" un directorio o carpeta con el mismo nombre que el paquete (es decir, un directorio Practicas) y dentro de él el fichero miClase.class correspondiente. Cuando alguna otra clase quiera usar esta clase, pondrá import Practicas.MiClase; JAR jar permite "empaquetar" en un único fichero *.jar varias estructuras de directorios con sus archivos. Es un archivo ejecutable de java que contiene todo. Práctica 138 Creación de un archivo .jar en simbolo de sistema Aquí explicaremos como crear un archivo JAR ejecutable para aplicaciones Java que es válido para cualquier sistema operativo y aporta otras muchas posibilidades. Podemos considerar un archivo *.jar como un árbol de directorios y ficheros, que ha sido empaquetado. Los archivos jar permiten introducir todos los archivos necesarios para ejecutar nuestra aplicación (clases, imágenes, sonidos, archivos de texto, etc.) en uno solo con la posibilidad de comprimirlos. Pero además ofrecen otras posibilidades, entre las que se encuentra la posibilidad de añadir información adicional: versión del programa, quién lo creó, entre otros y la que en nuestro caso nos interesa: indicar la clase principal (la que contiene el método main()) para poder ejecutarla con el intérprete de Java. Esta información se guarda en un archivo dentro del jar, que se llama MANIFEST.MF cuya ruta dentro del archivo jar será siempre META-INF/MANIFEST.MF. Este archivo es creado por defecto siempre que se crea un archivo jar. Este archivo se puede personalizar, más adelante veremos cómo. Ejemplo jar cfv MiArchivo.jar Clase1.class Clase2.class Imagen1.gif Imagen2.gif Texto.txt OtrosArchivos Con esta instrucción estamos creando un archivo jar de nombre MiArchivo.jar que contendrá los archivos Clase1.class, Clase2.class, Imagen1.gif, Imagen2.gif, Texto.txt y el directorio OtrosArchivos. Como se puede observar en un archivo jar podemos meter cualquier tipo de archivo, incluso directorios. En el ejemplo hemos empleado las opciones c, f y v de la línea de comandos. Veamos la descripción de estas opciones y otras más: c - Indica que vamos a crear un archivo. f - Indica que la salida vaya a un archivo, y no a la salida estándar. www.dariolara.com Guía 25 – Package Jar Manifest Construcción de Software II 141 v - Indica que queremos obtener información durante el proceso de creación del archivo. m - Indica al programa que queremos personalizar el archivo de manifiesto para añadir información adicional. M - Indica que no se cree el archivo de manifiesto. 0 - Indicamos que no queremos que se comprima el contenido del archivo. Práctica 139 Creacion de un Archivo MANIFEST.MF Se usa para indicar cual va a ser la clase principal que contiene el método main() y que ejecutará el programa al hacer doble clic en el jar. El archivo de manifiesto es un archivo de texto plano (sin formato). El archivo podrá tener cualquier nombre y/o extensión, ya que lo que el programa jar hará será mezclar el contenido de este archivo con el que se crea por defecto. En nuestro caso el archivo de manifiesto tendrá una sola línea en la que indicaremos la clase principal (la que contiene el método main). Esto se hace de la siguiente forma: Main-Class: ClasePrincipal De este modo se indica cual es la clase principal (sin .class). Ahora deberemos crear el archivo jar con esta información. Creamos con el bloc de notas MiManifiesto.mf A continuación se muestra un ejemplo: jar cfm MiManifiesto.mf MiArchivo.jar ClasePrincipal.class OtraClase.class Imagen.gif Ahora si abrimos el archivo jar con WinZip o alguno similar y consultamos el contenido de MANIFEST.MF veremos se le añadió la línea Main-Class: ClasePrincipal. Como seguramente ya se dieron cuenta, podemos editar directamente el archivo MANIFEST.MF añadiendo la línea de Main-Class: ClasePrincipal evitando todo el procedimiento que acabamos de explicar, aunque la forma recomendada es siguiendo el procedimiento para evitar algún tipo de error humano. Ahora solamente tenemos que indicar al sistema operativo que los archivos .jar se tienen que abrir con el interprete de Java. Agregar un directorio package al codigo. Si hemos puesto package en nuestras clases, debemos crear un directorio con el nombre del paquete y dejar en él nuestros *.class. Luego con jar debemos empaquetar el directorio con las clases que tiene dentro Ejemplo jar cvf MiLibreria.jar Practicas/*.class Esto mete dentro de MiLibreria.jar el directorio con todas sus clases. Al igual que antes. java busca en el fichero .jar un directorio con el mismo nombre que el paquete y dentro de él la clase. Por ello es importante empaquetar también el directorio. Nota Para verificar qué es lo que se ha metido en nuestro .jar y asegurarnos que es lo que queremos, se usa la opción t jar tvf MiLibreria.jar www.dariolara.com