miércoles, 19 de agosto de 2009

Que es la variable CLASSPATH y como se usa con JAVA?

El lenguaje Java cuenta con su compilador llamado javac (Java Compiler), el cual nos permite a partir de un archivo de programa fuente (.java) generar un segundo archivo con código intermedio denominado bytecode (.class)

Este compilador reside o queda instalado normalmente en alguna ruta como por ejemplo:c:\archivos de programa\java\jdk1.6.0_14\bin
(El nombre de la carpeta dependerá de la versión del SDK (Software Development Kit)que se instale, en este ejemplo es la versión 1.6)

Así mismo Java cuenta con su intérprete : java , el cual permite interpretarlos archivos .class o bytecode a código puro entendible por la computadorajusto en el instante (JIT) que se intente realizar la ejecución del programa.

Estos archivos .class normalmente son almacenados en una carpeta diferentea la carpeta de instalación del SDK (mencionada unas líneas arriba) como por ejemplo en la ubicación D:\MISPROGRAMASJAVA

Supongamos que tenemos un programa llamado Ejemplo.java que reside en dicha ubicación y queremos generar un bytecode para luego ser ejecutado

Estando en el indicador del sistama de windows (Inicio - Ejecutar -CMD [ENTER])La forma de compilar el programa Ejemplo.java sería así:

c:\archivos de programa\java\jdk1.6.0_14\bin> JAVAC D:\MISPROGRAMASJAVA\Ejemplo.java [ENTER]

Ahora se ha generado un segundo archivo llamado Ejemplo.class el cual quedo almacenado en D:\MISPROGRAMASJAVA (pues es el lugar de donde se tomo el programa fuente Ejemplo.java)

AHORA VIENE EL USO DE UNA VARIABLE DE ENTORNO : CLASSPATH
Esta es una variable de entorno que se necesita declarar a nivel de sistema operativo (windows, linux, etc) para que java pueda localizar a los archivos .class de forma automática.

Siguiendo nuestro ejemplo tenemos un archivo llamado Ejemplo.class localizado en D:\MISPROGRAMASJAVA

Si a continuación digitamos el siguiente comando desde el indicador del sistema windowsc:\archivos de programa\java\jdk1.6.0_14\bin> JAVA D:\MISPROGRAMASJAVA\Ejemplo [ENTER]
Java podría generar un error como el siguiente:

Exception in thread "main" java.lang.NoClassDefFoundError : D:\MISPROGRAMASJAVA\Ejemplo
Caused by: Java........etc etc etc.

A pesar de que hemos indicado la ruta donde debe ser localizado el archivo .classjava hace caso omiso a dicha indicación.

Solución (con Windows):
Tenemos 2 soluciones posibles
1) Asignar manualmente un valor a la variable de entorno CLASSPATH para que java
busque los archivos .class en una carpeta específica.
(solución que solamente será util mientras no reiniciemos la computadora)
2) Dejar un registro en la computadora en panel de control-Sistema para la variable
CLASSPATH
(solución que es permanente aunque reiniciemos la computadora y es configurable)


En esta ocasión vamos a definir la solución número 1.

Podemos digitar el siguiente comando desde el indicador del sistema:c:\archivos de programa\java\jdk1.6.0_14\bin> SET CLASSPATH=D:\MISPROGRAMASJAVA [ENTER]

(para ver el valor actual de la variable bastaría con digitar set classpath [ENTER])

De ahora en adelante donde quiera que estemos ubicados en el indicador del sistema podremos digitar el siguiente comando para ejecutar nuestros programas (sin definir laruta de forma explícita) :

JAVA Ejemplo [ENTER]

Otra variante para ignorar el contenido de la variable CLASSPATH es digitar el siguiente comando:

c:\archivos de programa\java\jdk1.6.0_14\bin> JAVA -cp D:\MISPROGRAMASJAVA [ESPACIO] Ejemplo [ENTER]

donde -cp indica ClassPath y dice a java que no utilice el valor actual de la variable del sistema, si no más bien la ruta que nosotros le estamos indicando manualmente.

Inténtelo!

Saludos Ing. Alex Jiménez.

5 comentarios:

  1. Que bueno....
    Con esta variable de entorno ayudara mucho a la hora de organizar los archivos *.class

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. En el comentario anterior dije: "que buen post", pero lo elimine por error...

    ResponderEliminar
  4. bueno todavia no me queda claro para que es la variable classpath, pero encontre una forma de ir a la acciones anterior hechas en cmd, y es dando flecha arriba pero solamente sirve cuando ya emos ido anteriormente a la ruta donde esta el ejempo, en otra palabras a donde se creo la .class

    ResponderEliminar
  5. Esa variable, para que comprendas mejor lo que hace es lo siguiente:

    Localiza los archivos .class desde cualquier parte de forma automatica.(aunque ahi arriba dice eso).

    o sea, para que puedas ejecutarlo desde cualquier ubicacion, lo que resulta mas sencillo.

    ResponderEliminar