2010-03-07 13 views
201

Estaba leyendo esta línea:¿Qué es un classpath?

Lo primero que el método format() hace es cargar una plantilla de velocidad de la ruta de clase llamado output.vm

Y yo no podía entender por qué se entiende por classpath en este contexto.

+21

Esto se explica claramente [Dominar el CLASSPATH Java] (http://kevinboone.net/classpath.html) seguramente proporciona el toque del médico a cualquier paciente que sufre de classpath-fobia. Practicar el ejemplo dado borra todas las confusiones relacionadas. – KNU

Respuesta

315

Al programar en Java, a tomar otras clases disponibles para la clase que está escribiendo, poniendo algo como esto en la parte superior de su archivo fuente:

import org.javaguy.coolframework.MyClass; 

O a veces se 'importación masiva' cosas diciendo :

import org.javaguy.coolframework.*; 

Así adelante en su programa cuando dicen:

MyClass mine = new MyClass(); 

La Máquina Virtual Java sabrá dónde encontrar su clase compilada.

No sería práctico tener la máquina virtual en todas las carpetas de la máquina, por lo que debe proporcionar a la máquina virtual una lista de lugares para buscar. Esto se hace poniendo archivos de carpeta y jar en su classpath.

Antes de hablar sobre cómo se establece el classpath, hablemos de los archivos .class, los paquetes y los archivos .jar.

Primero, supongamos que MyClass es algo que construiste como parte de tu proyecto, y está en un directorio de tu proyecto llamado output. El archivo .class estaría en output/org/javaguy/coolframework/MyClass.class (junto con cualquier otro archivo en ese paquete). Para llegar a ese archivo, su ruta simplemente necesitaría contener la carpeta 'salida', no toda la estructura del paquete, ya que su declaración de importación proporciona toda esa información a la máquina virtual.

Supongamos ahora que empaqueta CoolFramework en un archivo .jar y coloca CoolFramework.jar en un directorio lib en su proyecto. Ahora necesitaría poner lib/CoolFramework.jar en su classpath. La máquina virtual buscará dentro del archivo jar para la pieza org/javaguy/coolframework y encontrará su clase.

Por lo tanto, las rutas de clases contienen:

  • archivos JAR y
  • Caminos hacia la parte superior de las jerarquías del paquete.

¿Cómo se configura el classpath?

La primera forma en que todo el mundo parece aprender es con variables de entorno. En una máquina UNIX, puede decir algo como:

export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/ 

en una máquina Windows que tenga que ir a la configuración del medio ambiente y, o bien añadir o modificar el valor que ya está ahí.

La segunda forma es utilizar el parámetro -cp al iniciar Java, así:

java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/" MyMainClass 

Una variante de este tercer camino se hace a menudo con un .sh o .bat que calcula la ruta de clase y lo pasa a Java a través del parámetro -cp.

¿Cuál es la mejor manera de hacerlo?

Establecer cosas globalmente a través de variables de entorno es malo, generalmente por el mismo tipo de razones que las variables globales son malas. Cambia la variable de entorno CLASSPATH para que un programa funcione, y termina rompiendo otro programa.

El -cp es el camino a seguir. Por lo general, me aseguro de que mi variable de entorno CLASSPATH sea una cadena vacía donde desarrollo, siempre que sea posible, para evitar problemas globales de classpath (algunas herramientas no están contentas cuando el classpath global está vacío, sé de dos mega-mil comunes dólares con licencia J2EE y servidores Java que tienen este tipo de problema con sus herramientas de línea de comandos).

+4

Otro blog bien explicado sobre [Qué es PATH y CLASSPATH en Java - Path vs ClassPath] (http://java67.blogspot.in/2012/08/what-is-path-and-classpath-in-java-difference). html) – KNU

+2

Explicación impresionante !! –

+0

En python hay una carpeta llamada Lib donde puedes almacenar cualquier módulo para usar en cualquier momento con una simple declaración de importación. ¿Es esto diferente a establecer la variable de entorno CLASSPATH en un directorio para paquetes java de terceros? Aunque sería global, no habría necesidad de cambiar la variable, aparte de agregar más paquetes. –

3

La classpath en este contexto es exactamente lo que es en el contexto general: en cualquier lugar en que la VM sepa que puede encontrar clases para cargar, y recursos también (como output.vm en su caso).

Entiendo que Velocity espera encontrar un archivo llamado output.vm en cualquier lugar en "sin paquete". Puede ser una carpeta JAR, normal, ... La raíz de cualquiera de las ubicaciones en el classpath de la aplicación.

7

classpath es la ruta donde Java Virtual Machine busca clases, paquetes y recursos definidos por el usuario en programas Java.

En este contexto, el método format() carga un archivo de plantilla desde esta ruta.

35

Piense en ello como la respuesta de Java a la variable de entorno PATH: los SO buscan EA en el PATH, Java busca clases y paquetes en classpath.

Al igual que la pregunta springsteen-esque, también.

-1

classpath y path son las variables de entorno. por lo general, debe colocar el jdk/bin en la ruta para que pueda usar el compilador Java en todas partes, classpath es la ruta de sus archivos .class. classpath tiene una ruta predeterminada un punto (.) que significa el directorio actual. pero cuando usaste los paquetes. especificaría la ruta completa del archivo .class o colocaría la ruta del archivo .class en classpath, lo que ahorraría muchos trabajos.

1

Classpath es una variable de entorno del sistema. La configuración de esta variable se usa para proporcionar la raíz de cualquier jerarquía de paquetes al compilador de Java.

-1

CLASSPATH es una variable de entorno (es decir, variables globales del sistema operativo disponible para todos los procesos) necesaria para que el compilador Java y el tiempo de ejecución ubiquen los paquetes Java utilizados en un programa Java. (¿Por qué no llamar a PACKAGEPATH?) Esto es similar a otra variable de entorno PATH, que es utilizada por el shell CMD para encontrar los programas ejecutables.

CLASSPATH puede ajustarse en una de las siguientes maneras:

CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH. 

To check the current setting of the CLASSPATH, issue the following command: 

> SET CLASSPATH 

CLASSPATH can be set temporarily for that particular CMD shell session by issuing the following command: 

> SET CLASSPATH=.;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar 

Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and java commands, for example, 

> java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3 
0

Ajuste de la variable del sistema CLASSPATH

Para mostrar la variable CLASSPATH actual, utilice estos comandos en Windows y UNIX (shell Bourne): En Windows: C:\> set CLASSPATH En UNIX: % echo $CLASSPATH

Para borrar el contenido actual de la variable CLASSPATH, utilice estos comandos: En Windows: C:\> set CLASSPATH= En UNIX: % unset CLASSPATH; export CLASSPATH

para establecer la variable CLASSPATH, utilice estos comandos (por ejemplo): En Windows: C:\> set CLASSPATH=C:\users\george\java\classes En UNIX: % CLASSPATH=/home/george/java/classes; export CLASSPATH

+1

Si bien estos comandos pueden ser útiles para trabajar con variables de entorno, esto no responde a la pregunta – Hulk

Cuestiones relacionadas