G.Bordel >Docencia >TAP Técnicas Actuales de Programación (curso 2010-2011)
desprotegido Intro. desprotegido Temario desprotegido Calendario desprotegido RPF desprotegido Recursos protegido Práctica protegido Gest. Alum.
tema_anterior Tema 2: Uso del entorno de desarrollo tema_siguiente
  1. Ejemplo inicial: el programa "HolaMundo".
  2. Bibliotecas de clases: su estructura.
  3. Compilación y ejecución.
  4. Generación de documentación.
  5. Desensamblado y decompilación.

2.3- Compilación y ejecución

La compilación se lleva a cabo con el mando "javac" (de "java compiler"). Aunque más adelante se matizará esto, comenzaremos por mencionar que para que una clase pueda ser compilada debe encontrarse en un fichero con su mismo nombre y extensión .java. Por tanto, si escribimos nuestro primer ejemplo en un fichero de nombre "HolaMundo.java" podremos compilar:


prompt> javac HolaMundo.java

Con esto obtenemos el fichero HolaMundo.class que puede ser ejecutado por la Máquina Virtual Java (mando java):


prompt> java HolaMundo
Hola, mundo
prompt>

(Obsérvese que la máquina virtual recibe el nombre de la clase sin la extensión .class)

Pero esto no es todo. Tomemos nuestra segunda versión del programa y hagamos uso de lo aprendido respecto a las bibliotecas. Pongamos que la clase Saludador pertenece a una biblioteca llamada cursoDoctorado y se encuentra en un paquete en el primer subnivel que se llama ejemplos. El código debe quedar así:


 1-
 2-
 3-
 4- 
 5-
 6-
 7-
 8-
 9-
10-
11-
12-


//
// Aplicación ejemplo "HolaMundo"
//

import cursoDoctorado.ejemplos.Saludo;

public class HolaMundo {
	public static void main(String[] args) {
		Saludo hola=new Saludo("Hola");
		hola.saludo("Mundo");
	}
}
  

 1-
 2-
 3-
 4- 
 5-
 6-
 7-
 8-
 9-
10-
11-
12-
13-
14-
15-
16-
17-
18-


//
// La declaración de un saludo
//

package cursoDoctorado.ejemplos;

public class Saludo {
	private String saludo;

	public Saludo(String s) {
	saludo=s;
	}

	public void saludo(String s) {
	System.out.println(saludo+", "+s);
	}

}

Situaremos ahora el fichero Saludo.java en un directorio ejemplos dentro de cursoDoctorado en algun lugar del sistema de ficheros (pongamos para este caso que en c:\), y procedamos a compilar. Basta con hacer:


prompt> javac -classpath "c:\" HolaMundo.java

El compilador compila la clase que se le indica y estudia sus dependencias. Descubre la necesidad de la clase Saludo y determina donde se encuentra, de modo que va a localizarla para chequear la consistencia de mi programa con aquella clase, y en caso de que no este compilada (o su codigo fuese posterior al fichero de la clase) se encarga de compilarla tambien, dejando el resultado en el paquete adecuado.

La ejecución se hará:


prompt> java -classpath ".;c:\" HolaMundo

Ejecución de aplicaciones en ficheros zip o jar

En el apartado anterior se mencionaba la posibilidad de aglutinar toda una biblioteca de clases en un fichero "zip". Esto mismo puede ser aplicado a toda una aplicación: se estructura conforme se considere necesario dentro de un arbol de directorios y se compacta incluyendo todas las clases. Una de estas clases será la que contenga el main, y puede ser llamada al invocar a la máquina virtual. Tomaremos como ejemplo una aplicación real en la que la clase inicial es la denominada SKTLSSJapp y para la cual se han compactado todos los ficheros de clase, que se encuentran en un mismo dorectorio, en un "zip" denominado SKTLSS.zip que contiene incluso a la clase inicial. La llamada para la ejecución de la aplicación es la siguiente:


prompt> java -classpath SKTLSS.zip SKTLSSJapp

Una vez que el fichero compactado incluye una aplicación (con su clase origen) podemos pensar que sería razonable hacer que este fichero sea "suficiente" para ser ejecutado, sin necesidad de especificar a la máquina virtual cual es la clase inicial. Esto puede hacerse si la información necesaria se incluye en el fichero de un modo establecido. Debe incluirse un subdirectorio del raiz con el nombre meta-inf y dentro de él un fichero, conocido como manifiesto, con el nombre manifest.mf. Una de las informaciones que pueden incluirse dentro de este manifiesto es la identificacion de la clase de inicio (además de otras que quedan fuera del ámbito de este curso). Para distinguir este fichero "zip" conteniendo el manifiesto, se le da extensión .jar y puede ser ejecutado por la Máquina Virtual dándoselo como parámetro a la opción -jar. Esto puede verse en la siguiente figura aplicado a un programa de demostración de un interfaz gráfico en Java.


Una aplicación contenida en un fichero "jar" debe incluir un fichero de información para el entorno de ejecución llamado "manifest.mf" dentro de un directorio de nombre "meta-inf". Como mínimo dentro deeste fichero se encontrará el nombre de la clase en la que se encuentra em método "main" que arranca la aplicación.

El mando jar del kit de desarollo java permite generar estos ficheros compactados. Es en todo punto semejante al tar de Unix utilizado con compresión, y simplemente se le ha añadido la posibilidad de aportarle el manifiesto como opción para que lo incluya en la estructura dentro del subdirectorio meta-inf y con el nombre adecuado, además de analizar que sea correcto. Por ejemplo, el fichero de la figura anterior podria haber sido creado con el siguiente mando:


prompt> jar -cvfm FileChooserDemo.jar elManifiesto *.class

Siguiente punto: 2.4- Generación de documentación


Plataforma de soporte a curso y contenidos (c) German Bordel 2005.