Me encuentro desarrollando una aplicación Java que utiliza un paquete de clases de un tercero. Este paquete lo he descargado del sitio del desarrollador en formato JAR
.
El formato de archivo JAR
(Java ARchive) se utiliza para agregar muchos archivos de clases Java junto con sus metadatos y recursos asociados (texto, imágenes, etc.) en un único archivo para distribuir una aplicación de software o librería en la plataforma Java. Los archivos JAR utilizan el formato ZIP
y tienen extensión .jar
.
A modo de ejemplo supongamos que estamos desarrollando la clase "HolaMundo" utilizando nuestro editor de texto favorito (en mi caso desarrollo utilizando gedit o kate):
HolaMundo.java
class HolaMundo { public static void main(String[] args) { System.out.println("Hola mundo!"); } }
Para compilar nuestra clase ejecutamos:
$ javac HolaMundo.java
Este comando produce el archivo binario HolaMundo.class
. Para ejecutar la aplicación "HolaMundo" utilizamos:
$ java HolaMundo
La salida esperada es:
Hola mundo!
Supongamos ahora que deseamos utilizar la clase "Pepe", perteneciente al paquete "com.pepe", la cual se incluye en el archivo pepe-1.0.jar
que hemos descargado del sitio de su desarrollador. ¿Cómo se debe indicarle al compilador javac
que debe buscar la clase "Pepe" dentro del archivo pepe-1.0.jar
?
Fácil, agregando la ruta al archivo pepe-1.0.jar
en el CLASSPATH
.
El CLASSPATH
es un parámetro (seteado en la línea de comando, o a través de una variable de entorno) que le indica a la máquina virtual Java o al complilador Java dónde buscar clases y paquetes definidos por el usuario.
Modificamos el código para incluir la clase "Pepe":
HolaMundo.java
import com.pepe.Pepe; class HolaMundo { public static void main(String[] args) { System.out.println("Hola mundo!"); Pepe pepe = new Pepe(); pepe.hacerAlgoGenial(); } }
Para compilar la clase "HolaMundo.java", la cual utiliza clases incluidas en el archivo pepe-1.0.jar
, es necesario setear el CLASSPATH
mediante el parámetro -cp
:
$ javac -cp ".:/ruta/al/archivo/pepe-1.0.jar" HolaMundo.java
De la misma forma se ejecuta la aplicación:
$ java -cp ".:/ruta/al/archivo/pepe-1.0.jar" HolaMundo
Veamos cómo seteamos el CLASSPATH
. Entre comillas dobles se indica una lista de direcorios y/o archivos donde buscar clases. Cada elemento de la lista se separa con dos puntos :
(en GNU/Linux, en Windows se deben separar con punto y coma ;
). En el ejemplo, la lista posee dos elementos: el primer elemento '.
' indica que se busquen clases en el directorio actual; el segundo elemento '/ruta/al/archivo/pepe-1.0.jar
' indica que se busquen clases dentro del archivo pepe-1.0.jar
que se encuentra en el directorio /ruta/al/archivo/
.
En los sistemas operativos Windows funciona exactamente igual, a excepción de que se debe utilizar punto y coma en vez de dos puntos:
$ java -cp .;C:\ruta\al\archivo\pepe-1.0.jar HolaMundo
Espero que se haya entendido. Hasta el próximo artículo!!