Apuntes Java: Compilación y ejecución

En este apartado se asume que se ha instalado el JDK (J2SE) distribuido por Oracle y que tanto el compilador (javac) como la JVM (java) están accesibles. Asumiremos que los comandos se emitirán desde una ventana de comandos en un sistema Windows, siendo la sintaxis en un entorno UNIX muy parecida. En este capítulo se verán todos los pasos necesarios para crear, compilar y ejecutar un programa Java.

Creación y Compilación de un programa Java

PASO 1: Con un editor de texto simple (incluso notepad sirve, aunque resulta poco aconsejabe) creamos un archivo con el contenido siguiente:

package Programas.Ejemplo1;

class HolaMundo {
    public static void main ( String [] args) {
        System.out.println("Hola a todos");
    }
}

Guardamos el fichero fuente con nombre HolaMundo.java en la carpeta: C:ApuntesJavaProgramasEjemplo1.

PASO 2: Abrimos una ventana de comandos y en ella:

C:> cd C:ApuntesJava 
C:ApuntesJava>javac ProgramasEjemplo1HolaMundo.java

Si no hay ningún error en el programa se producirá la compilación y el compilador almacenará en el directorio C:ApuntesJavaProgramasEjemplo1 un fichero de nombre HolaMundo.class, con el código ejecutable correspondiente a la clase HolaMundo.

Recuerda que en Java las mayúsculas y minúsculas son significativas. No es lo mismo la clase ejemplo1 que la clase Ejemplo1. Esto suele ser fuente de errores, sobre todo al principio. Sin embargo, ten en cuenta que en algunos sistemas operativos como Windows, esta distinción no existe. Puedes poner cd C:ApuntesJava o cd C:APUNTESJAVA  indistintamente: el resultado será el mismo (no así en cualquier UNIX, que sí distingue unas y otras). Asegúrate por tanto, de que las palabras están correctamente escritas.

Cuando pones javac ProgramasEjemplo1HolaMundo.java estás indicando al compilador que busque un archivo de nombre HolaMundo.java en la ruta ProgramasEjemplo1, a partir del directorio actual; es decir, estás especificando la ruta de un archivo. El compilador traduce el código fuente que tu has escrito en alguna forma de lenguaje ejecutable por el sistema. En el caso de Java este lenguaje ejecutable se llama bytecode y es interpretado y ejecutado por la Máquina Virtual Java (JVM)

En el ejemplo se utiliza la clase del API de Java System. Sin embargo el programa no tiene ningún import. No obstante el compilador no detecta ningún error y genera el código ejecutable directamente. Esto se debe a que la clase System está definida en el package java.lang, que es el único del que no es necesario hacer el import, que es hecho implícitamente por el compilador. Para cualquier clase del API, definida fuera de este package es necesario hacer el import correspondiente.

Ejecución de un programa Java

PASO 3: Ejecutar el programa: Desde la ventana de comandos:

C:ApuntesJava>java Programas.Ejemplo1.HolaMundo

El comando Java invoca la Máquina Virtual (JVM), que se cargará en memoria, y ésta cargará la clase HolaMundo y llamará a su método main que producirá en la ventana de comandos la salida:

Hola a todos

Los archivos .class son invocables directamente desde la línea de comandos (con la sintaxis java nombreDeClase) si tienen un método main definido tal como se vio en un capítulo anterior.

Se puede indicar a la JVM que busque las clases en rutas alternativas al directorio actual. Esto se hace con el parámetro -classpath (abreviadamente -cp) en la línea de comandos. Por ejemplo si el directorio actual es otro, podemos invocar el programa de ejemplo de la forma:

C:Windows>java -cp C:ApuntesJava Programas.Ejemplo1.HolaMundo

Con el parámetro -cp se puede especificar diversas rutas alternativas para la búsqueda de clases separadas por ;

Cuando pones java Programas.Ejemplo1.HolaMundo estás indicando a la JVM que cargue y ejecute la clase HolaMundo del Package Programas, subpackage Ejemplo1. Para cumplir está orden, expresada en términos Java de clases y packages la JVM buscará el archivo HolaMundo.class en la ruta ProgramasEjemplo1 que es algo expresado en términos del sistema de archivos, y por tanto del Sistema Operativo.

Se puede ver la sintaxis completa del comando Java con: java -help

Archivos fuente (.java) y ejecutables (.class)

El esquema habitual es tener un archivo fuente por clase y asignar al archivo fuente el mismo nombre que la clase con la extensión .java (el nombre .java para la extensión es obligatorio). Esto generará al compilar un archivo .class con el mismo nombre que el fuente ( y que la clase). Fuentes y ejecutables en el mismo directorio.

Lo habitual es tener uno o varios packages que compartan un esquema jerárquico de directorios en función de nuestras necesidades (packages por aplicaciones, temas, etc.)

Es posible definir más de una clase en un archivo fuente, pero sólo una de ellas podrá ser declarada public (es decir podrá ser utilizada fuera del package donde se define). Todas las demás clases declaradas en el fuente serán internas al package. Si hay una clase public entonces, obligatoriamente, el nombre del fuente tiene que coincider con el de la clase declarada como public . Los modificadores de acceso (public, es uno de ellos) se verán en el capítulo siguiente.

Archivos ejecutables .jar

A medida que la aplicación va creciendo aumenta el número de clases y packages. Distibuir una aplicación con muchos archivos .class puede ser poco eficaz. Para resolver esta situación están los archivos .jar (Java Archive), que permite empaquetar archivos ejecutables java (.class) y otro tipo de ficheros usados en la ejecución del programa java, genéricamente denominados recursos en un solo fichero, para facilitar su distribución y ejecución. Un archivo .jar puede contener:

  • Un conjunto de archivos ejecutables Java (.class) distribuidos en uno o varios packages.
  • Un conjunto de otros archivos utilizados por la aplicación, como imágenes, ficheros de configuración u otros. (Recursos)
  • Un manifiesto, que es un fichero de configuración XML que indica que clase contiene el método main, para comenzar la ejecución del programa y otros parámetros de configuración (como el classpath, librerías adicionales, etc). Este manifiesto debe llamarse manifest.xml y debe existir obligatoriamente.

El archivo .jar puede crearse con una utilidad distribuida con el JDK, que se llama jar.  Una vez creado puede ejecutarse desde una ventana de comandos con el comando:

java -jar nombre_archivo.jar

O bien, en sistemas como Windows puede ejecutarse directamente haciendo doble click en el propio archivo jar.

Entornos de desarrollo (IDE)

El proceso de editar código fuente, compilarlo, probarlo, depurarlo, y fabricar el archivo ejecutable final se simplifica notablemente utilizando un entorno de desarrollo integrado (IDE). Para Java existen varios IDE's que han alcanzado gran popularidad:

  • Netbeans: Se puede descargar conjuntamente con el JDK, o de forma independiente, aquí. Es gratuito y su funcionamiento es bastante intuitivo.
  • Eclipse: También es gratuito. Se puede descargar aquí. Es un poco más complejo que Netbeans y tiene muchos plugins para trabajar con muchos productos adicionales del mundo java.
  • IntelliJ IDEA:  Es un producto comercial, pero también dispone de una versión community gratuita, que puede descargarse aquí.

Explicar los detalles de funcionamiento de un IDE va más alla de la intención de este tutorial. Si no has utilizado ninguno la recomendación es que descargues e instales Netbeans. Es sencillo e intuitivo de manejar y las operaciones básicas no presentan dificultades especiales.

Última actualización: 13/11/2016