Articulo de referencia

Ruta de clases

Classpath es un parámetro de la máquina virtual Java o del compilador Java que especifica la ubicación de las clases y paquetes definidos por el usuario . Este parámetro se pued...

Classpath es un parámetro de la máquina virtual Java o del compilador Java que especifica la ubicación de las clases y paquetes definidos por el usuario . Este parámetro se puede configurar mediante la línea de comandos o a través de una variable de entorno .

Descripción general y arquitectura

De forma similar al comportamiento clásico de carga dinámica , al ejecutar programas Java , la Máquina Virtual de Java busca y carga las clases de forma diferida (carga el código de bytes de una clase solo cuando se utiliza por primera vez). El classpath le indica a Java dónde buscar en el sistema de archivos los archivos que definen estas clases.

La máquina virtual busca y carga las clases en este orden:

  1. Clases de arranque: las clases que son fundamentales para la plataforma Java (que comprenden las clases públicas de la biblioteca de clases de Java y las clases privadas que son necesarias para que esta biblioteca sea funcional).
  2. clases de extensión: paquetes que se encuentran en el directorio de extensión del entorno de ejecución de Java o JDK ,jre/lib/ext/
  3. paquetes y bibliotecas definidos por el usuario

Por defecto, solo se puede acceder a los paquetes de la API estándar de JDK y a los paquetes de extensión sin necesidad de especificar su ubicación. La ruta para todos los paquetes y bibliotecas definidos por el usuario debe configurarse en la línea de comandos (o en el manifiesto asociado al archivo JAR que contiene las clases).

Configurar la ruta para ejecutar programas Java

Proporcionar como argumento de la solicitud

Supongamos que tenemos un paquete llamado org.mypackage que contiene las clases:

  • Hola Mundo (clase principal)
  • Clase de soporte
  • Clase de utilidad

y los archivos que definen este paquete se almacenan físicamente en el directorio D:\myprogram (en Windows ) o /home/user/myprogram (en Linux ).

La estructura de archivos es la siguiente:

Cuando invocamos Java, especificamos el nombre de la aplicación que se va a ejecutar: org.mypackage.HelloWorld. Sin embargo, también debemos indicarle a Java dónde buscar los archivos y directorios que definen nuestro paquete. Por lo tanto, para iniciar el programa, usamos el siguiente comando:

dónde:

  • javaes el lanzador de tiempo de ejecución de Java , un tipo de herramienta SDK (una herramienta de línea de comandos, como javac , javadoc o apt ).
  • -classpath D:\myprogram establece la ruta a los paquetes utilizados en el programa (en Linux, -cp /home/user/myprogram ) y
  • org.mypackage.HelloWorld es el nombre de la clase principal.

Establecer la ruta a través de una variable de entorno

La variable de entorno denominada CLASSPATHpuede utilizarse alternativamente para establecer la ruta de clases. Para el ejemplo anterior, también podríamos usar en Windows:

D:\myprogram> set CLASSPATH = D:\myprogram D:\myprogram> java org.mypackage.HelloWorld 

La regla es que esta -classpathopción, al usarse para iniciar la aplicación Java, sobrescribe la CLASSPATHvariable de entorno. Si no se especifica ninguna, se usa el directorio de trabajo actualD:\myprogram\ como classpath. Esto significa que cuando nuestro directorio de trabajo es (en Linux, /home/user/myprogram/), no necesitaríamos especificar el classpath explícitamente. Sin embargo, al sobrescribir la variable de entorno, se recomienda incluir la carpeta actual "."en el classpath si se desea cargar clases desde dicha carpeta.

Lo mismo se aplica no solo al lanzador de Java, sino también a javac , el compilador de Java.

Configurar la ruta de un archivo Jar

Si un programa utiliza una biblioteca de soporte incluida en un archivo Jar llamado supportLib.jar , ubicado físicamente en el directorio D:\myprogram\lib\ y la estructura de archivos físicos correspondiente es:

D:\miprograma\ | ---> lib\ | ---> supportLib.jar | ---> org\ | ---> mi paquete | ---> HelloWorld.class ---> Clase de soporte. ---> UtilClass.class 

Se necesita la siguiente opción de línea de comandos :

java -classpath D:\myprogram;D:\myprogram\lib\supportLib.jar org.mypackage.HelloWorld

o alternativamente:

D:\myprogram> set CLASSPATH = D:\myprogram;D:\myprogram\lib\supportLib.jar D:\myprogram> java org.mypackage.HelloWorld 

Agregar todos los archivos JAR en un directorio

En Java 6 y versiones posteriores, se pueden agregar todos los archivos jar de un directorio específico al classpath utilizando la notación de comodines.

Ejemplo de Windows:

D:\myprogram> java -classpath ".;c:\mylib\*" MyApp 

Ejemplo de Linux:

$ java -classpath '.:/mylib/*' MyApp 

Esto funciona tanto para -classpathlas opciones como para las rutas de clases del entorno.

Configurar la ruta en un archivo de manifiesto

Si un programa se ha incluido en un archivo Jar llamado helloWorld.jar , ubicado directamente en el directorio D:\myprogram , la estructura de directorios es la siguiente:

D:\miprograma\ | ---> helloWorld.jar | ---> lib\ | ---> supportLib.jar 

El archivo de manifiesto definido en helloWorld.jar tiene esta definición:

Clase principal : org.mypackage.HelloWorld Ruta de clases : lib/supportLib.jar

El archivo de manifiesto debe terminar con una nueva línea o un retorno de carro.

El programa se inicia con el siguiente comando:

java -jar D:\myprogram\helloWorld.jar [argumentos de la aplicación]

Esto inicia automáticamente org.mypackage.HelloWorld, especificado en la clase Main-Class, con los argumentos. El usuario no puede reemplazar este nombre de clase usando la invocación java -jar. Class-Path describe la ubicación de supportLib.jar en relación con la ubicación de la biblioteca helloWorld.jar . No se admiten ni rutas de archivo absolutas, que se permiten en el -classpathparámetro de la línea de comandos, ni rutas internas del jar. Esto significa que si el archivo de clase principal está contenido en un jar, org/mypackage/HelloWorld.class debe ser una ruta válida en la raíz dentro del jar.

Las múltiples entradas de classpath están separadas por espacios:

Ruta de clases : lib/supportLib.jar lib/supportLib2.jar

Notas específicas del sistema operativo

Al estar estrechamente relacionada con el sistema de archivos, la sintaxis de Classpath de la línea de comandos depende del sistema operativo. [ 1 ] Por ejemplo:

  • En todos los sistemas operativos tipo Unix (como Linux y Mac OS X ), la estructura de directorios tiene una sintaxis Unix, con rutas de archivo separadas por dos puntos (":").
  • En Windows , la estructura de directorios tiene una sintaxis de Windows, y cada ruta de archivo debe estar separada por un punto y coma (";").

Esto no se aplica cuando el Classpath se define en archivos de manifiesto , donde cada ruta de archivo debe estar separada por un espacio ("  "), independientemente del sistema operativo.

Véase también

Referencias

  1. "The Classpath" . 6 de agosto de 2013. Consultado el 26 de junio de 2016 .
  • Nota explicativa sobre cómo encontrar las clases Java, en el sitio web de Oracle.
  • Especificación de cómo configurar el Classpath en el sitio de Oracle
Obtenido de " https://en.wikipedia.org/w/index.php?title=Classpath&oldid=1356813882 "