14/09/2021
A menudo, al ejecutar programas Java, necesitamos especificar librerías externas para que nuestro código funcione correctamente. Estas librerías contienen clases y métodos adicionales que nuestro programa utiliza. Si no se especifican correctamente, la ejecución fallará con errores de ClassNotFoundExceptiono similares. Este artículo explica detalladamente cómo especificar librerías Java al ejecutar tus programas, cubriendo diferentes escenarios y métodos.

Métodos para especificar librerías Java
Existen varias maneras de especificar las librerías Java necesarias para la ejecución de un programa. La elección del método dependerá del entorno de desarrollo y de la complejidad del proyecto.
Usando la variable de entorno CLASSPATH
El método tradicional para especificar librerías Java es mediante la variable de entorno CLASSPATH. Esta variable indica al Java Virtual Machine(JVM) dónde buscar las clases y archivos .jar necesarios. Para usar este método:
- Identifica la ruta de tu librería: Localiza el archivo .jar o el directorio que contiene las clases de tu librería.
- Modifica la variable CLASSPATH: La forma de modificar la variable CLASSPATH depende del sistema operativo. En Windows, puedes hacerlo a través del Panel de control, en sistemas basados en Unix/Linux, se suele editar un archivo de configuración como
~/.bashrco~/.zshrc. - Añade la ruta de la librería: Agrega la ruta completa de tu librería a la variable CLASSPATH. Si tienes varias librerías, sepáralas con punto y coma (;) en Windows o dos puntos (:) en Unix/Linux. Ejemplo en Windows:
CLASSPATH=C:\ruta\a\milibreria.jar;C:\otra\ruta\a\otraLibreria.jar - Reinicia la consola o el sistema: Para que los cambios surtan efecto, es necesario reiniciar la consola o cerrar sesión y volver a abrirla.
Ejemplo: Supongamos que tu librería se encuentra en C:\misLibrerias\miLibreria.jar. Debes añadir C:\misLibrerias\miLibreria.jara tu variable CLASSPATH.
Ventajas: Simple para proyectos pequeños. Desventajas: Puede ser complicado de gestionar en proyectos grandes con muchas dependencias. No es ideal para entornos de desarrollo colaborativos.
Usando la opción -cp o -classpath en la línea de comandos
Esta es una alternativa más flexible a la modificación de la variable CLASSPATH. Al ejecutar tu programa Java desde la línea de comandos, puedes especificar la ruta de las librerías directamente usando la opción -cpo -classpath. La sintaxis es la siguiente:
java -cp
Ejemplo: Para ejecutar la clase MiProgramaque depende de la librería miLibreria.jarubicada en C:\misLibrerias, la línea de comandos sería:
java -cp C:\misLibrerias\miLibreria.jar MiPrograma
Si tienes varias librerías, sepáralas con punto y coma (;) en Windows o dos puntos (:) en Unix/Linux:
java -cp C:\misLibrerias\miLibreria.jar;C:\otrasLibrerias\otraLibreria.jar MiPrograma
Ventajas: Más flexible que modificar la variable CLASSPATH. No afecta a otros programas Java. Desventajas: Puede ser engorroso escribir la ruta completa de todas las librerías cada vez que ejecutas el programa.
Utilizando un archivo MANIFEST.MF (para aplicaciones JAR)
Si tu aplicación Java está empaquetada como un archivo JAR, puedes especificar las dependencias en el archivo MANIFEST.MF. Este archivo se encuentra dentro de un directorio META-INFdentro del JAR. Dentro del archivo MANIFEST.MF, debes añadir una entrada Class-Pathque liste las librerías necesarias. Cada ruta debe estar separada por un espacio.
Ejemplo de MANIFEST.MF:
Manifest-Version: 0Class-Path: miLibreria.jar otraLibreria.jarMain-Class: MiProgramaRecuerda que las librerías deben estar en el mismo directorio que el JAR o en un directorio accesible desde la ruta especificada. Ventajas: Limpia y organizada para aplicaciones JAR. Desventajas: Requiere un paso adicional de configuración.
Herramientas de gestión de dependencias (Maven, Gradle)
Para proyectos grandes y complejos, es altamente recomendable usar herramientas de gestión de dependencias como Maven o Gradle. Estas herramientas gestionan automáticamente las dependencias, descargan las librerías necesarias y configuran el CLASSPATH correctamente. Ventajas: Automatizan la gestión de dependencias, facilitando la colaboración en equipo y la reproducibilidad de los proyectos. Desventajas: Requieren un aprendizaje inicial.
Consultas habituales
A continuación, se responden algunas consultas habituales sobre la especificación de librerías Java:
¿Qué pasa si no especifico la librería?
Si no especificas la librería, obtendrás un error de ClassNotFoundExceptional intentar ejecutar tu programa. Esto indica que la JVM no puede encontrar las clases necesarias para ejecutar tu código.
¿Puedo especificar librerías en diferentes formatos (JAR, directorios)?
Sí, puedes especificar librerías tanto en formato JAR como en directorios que contengan las clases compiladas (.class).

¿Cómo manejo las dependencias de mis dependencias?
Las herramientas de gestión de dependencias como Maven y Gradle manejan automáticamente las dependencias transitivas (las dependencias de tus dependencias). Si no utilizas estas herramientas, tendrás que añadir manualmente todas las librerías necesarias, incluyendo las dependencias de tus dependencias.
Tabla comparativa de métodos
| Método | Ventajas | Desventajas | Recomendado para |
|---|---|---|---|
| Variable CLASSPATH | Simple para proyectos pequeños | Difícil de gestionar en proyectos grandes, afecta a otros programas | Proyectos pequeños, pruebas simples |
| Opción -cp/-classpath | Flexible, no afecta a otros programas | Engorroso para muchas librerías | Ejecuciones individuales desde la línea de comandos |
| Archivo MANIFEST.MF | Limpio para aplicaciones JAR | Requiere configuración adicional | Aplicaciones JAR |
| Maven/Gradle | Automatiza la gestión de dependencias | Requiere aprendizaje inicial | Proyectos grandes y complejos |
Conclusión
Especificar correctamente las librerías Java es crucial para la ejecución exitosa de tus programas. La mejor opción dependerá del tamaño y complejidad de tu proyecto. Para proyectos pequeños, la opción -cpo la variable CLASSPATHpueden ser suficientes. Para proyectos grandes y complejos, se recomienda utilizar herramientas de gestión de dependencias como Maven o Gradle para una gestión eficiente y automatizada de las librerías.
Si quieres conocer otros artículos parecidos a Cómo especificar la librería java al ejecutar java puedes visitar la categoría Libros y Librerías.
