[JAVA] Obtener el classpath en tiempo de ejecución
Cuando trabajas en java se maneja el concepto de classpath, entendamos primero el concepto antes de entrar al tema:
El classpath es el conjunto de rutas (ubicaciones) a las que tiene acceso el sistema operativo (p.ej: 'C:\Documents and settings\Mi Sesión') y donde el JVM (java virtual machine) puede encontrar byte code (.class que son los generados al compilar fuentes de java). La funcionalidad es similar a la variable de entorno 'PATH' de windows y linux.
Al ejecutar una aplicación de java es común encontrar líneas de ejecución como esta:
java -classpath IconosSC.jar;bin\OtroJar.jar; Paquete.Main
donde se está agregando al classpath del JVM el jar IconosSC.jar, el jar dentro de la carpeta bin con nombre OtroJar.jar y finalmente el nombre de la clase que iniciará la ejecución del programa que lleva el nombre de Main.
Ahora, que ocurre si queremos ver los directorios del classpath en tiempo de ejecución?, simple: Existe una clase estática llamada: ClassLoader, el concepto de cargador de clases puede dar tema a otro tópico para el blog, pero por el momento diremos que es el encargado de levantar las clases en el JVM, veamos las siguientes instrucciones:
import java.net.*;
URLClassLoader Cargador = (URLClassLoader)ClassLoader.getSystemClassLoader();
URL[] cjto = Cargador.getURLs();
System.err.println("Classpath size: " + cjto.length);
for (int i=0; i < cjto.length; i++)
System.err.println(i + " " + cjto[i].toString());
Las clases utilizadas se encuentran en java.net, como veras, el ClassLoader nos permite obtener el cargador de clases del sistema, devolviendonos una instancia de URLClassLoader a través del método 'getSystemClassLoader', luego podemos obtener los URL's (path's) en objetos URL que también se encuentran en java.net. Esto nos da muchas posibilidades si lo que buscamos es trabajar con el classpath, como por ejemplo si quisieramos agregar un jar en tiempo de ejecución, pero eso será otro tema para el blog!.