2010-01-29 14 views
16

¿El uso de la opción -classpath con java, agrega o reemplaza el contenido de la variable env CLASSPATH?Java classpath option

+3

Buena pregunta. Nunca lo he pensado – marionmaiden

+1

¿Desea saber si la variable de entorno ha cambiado? ¿Ejecutó una prueba para ver * realmente * si cambió? –

+0

¿Por qué no probarlo usted mismo? –

Respuesta

14

Al usar la variable classpath, anula la variable CLASSPATH de Environment pero solo para esa sesión. Si reinicia la aplicación, necesita volver a establecer la variable classpath.

+1

Perfecto. Gracias girienie por una respuesta concisa. Debes ser un experto en Java :) – Zacky112

+0

@ Zack112: Pregunta muy importante ... Gracias :) – giri

5

Sí. Citado de la página java(1) hombre:

-classpath classpath 
    -cp classpath 
      Specifies a list of directories, JAR archives, and ZIP archives to search for class files. Class 
      path entries are separated by colons (:). Specifying -classpath or -cp overrides any setting of the 
      CLASSPATH environment variable. 

      If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the cur- 
      rent directory (.). 
+2

La variable de entorno * no * se actualiza en absoluto, de acuerdo con esto. No veo cómo la respuesta es "sí". –

+2

@ S.Lott - ¿Desde qué punto de vista? Desde el * punto de vista * del programa, se reemplaza el valor CLASSPATH (si existe). Desde el punto de vista * shell *, el valor CLASSPATH no cambia. Creo que la pregunta original estaba mal redactada. – Nate

6

Cualquiera de las opciones que se use, no ambos.

Especificar -classpath o -cp anula cualquier configuración de la variable de entorno CLASSPATH.

...

La opción -classpath es preferible porque se puede configurar individualmente para cada aplicación sin afectar a otras aplicaciones y otras aplicaciones sin modificación de su valor.

...

establecer la variable CLASSPATH o utilizando la opción de línea de comandos que -classpath anula por defecto, por lo que si desea incluir el directorio actual en la ruta de búsqueda, debe incluir " " en la nueva configuración

6

El uso de la opción -cp no afectará a la variable de entorno CLASSPATH.

Puede probar este pequeño fragmento de código para comprobar esto:

public class CPTest { 
    public static void main (final String[] args) { 
     String cp = System.getenv("CLASSPATH"); 
     System.out.println(cp); 
    } 
} 
%echo $CLASSPATH 
/home/test/:. 

La salida sin opción -cp:

%java CPTest 
/home/test/:. 

La salida con la opción -cp:

%java -cp /home/xanadu:. CPTest 
/home/test/:. 

El resultado es el mismo para ambas invocaciones (una con -cp y otra sin).

también la ruta de acceso especificada en la CLASSPATH variable de medio ambiente es
utilizarse o la ruta especificada con se utiliza -cp opción. No es una mezcla de ambos es uno de ellos.

Esto es evidente en la siguiente invocación. Si la caquexia crónica (directorio de trabajo actual "")
se excluye de la opción -cp, el lanzador JVM (es decir, Java) no puede encontrar el archivo
clase a pesar de la variable de entorno CLASSPATH que contiene la caquexia crónica ("") en eso.

%java -cp /home/test CPTest 
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest 
Cuestiones relacionadas