java classpath apache-velocity

java - ¿Qué es un classpath?



apache-velocity (9)

Acabo de leer esta línea:

Lo primero que hace el método format () es cargar una plantilla de Velocity desde el classpath denominado output.vm

Y no pude entender qué significaba classpath en este contexto.


Al programar en Java, hace que otras clases estén disponibles para la clase que está escribiendo al poner algo como esto en la parte superior de su archivo fuente:

import org.javaguy.coolframework.MyClass;

O a veces lo ''importa en masa'' diciendo:

import org.javaguy.coolframework.*;

Así que más adelante en tu programa cuando dices:

MyClass mine = new MyClass();

La máquina virtual de Java sabrá dónde encontrar su clase compilada.

Sería impráctico que la máquina virtual busque en todas las carpetas de su máquina, por lo que debe proporcionarle a la máquina virtual una lista de lugares donde buscar. Esto se hace poniendo archivos de carpeta y jar en su classpath.

Antes de hablar sobre cómo se establece la ruta de clase, hablemos de los archivos .class, los paquetes y los archivos .jar.

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

Ahora supongamos que usted agrupa CoolFramework en un archivo .jar, y coloca ese CoolFramework.jar en un directorio lib en su proyecto. Ahora lib/CoolFramework.jar poner lib/CoolFramework.jar en tu classpath. La máquina virtual buscará en el archivo jar para la parte org/javaguy/coolframework y encontrará su clase.

Así, los classpaths contienen:

  • Archivos JAR, y
  • Rutas a la parte superior de las jerarquías de paquetes.

¿Cómo configuras tu classpath?

La primera forma en que todos parecen aprender es con las variables del entorno. En una máquina de Unix, puedes decir algo como:

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

En una máquina con Windows, debe ir a la configuración del entorno y agregar o modificar el valor que ya existe.

La segunda forma es usar el parámetro -cp al iniciar Java, de esta manera:

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

Una variante de esto es la tercera forma que a menudo se realiza con un archivo .sh o .bat que calcula la ruta de clase y la pasa a Java a través del parámetro -cp .

Entonces, ¿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 por las 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. En general, me aseguro de que mi variable de entorno CLASSPATH sea una cadena vacía donde se desarrolle, siempre que sea posible, para evitar problemas globales de classpath (algunas herramientas no están contentas cuando la classpath global está vacía, aunque conozco dos mega-mil comunes Los servidores J2EE y Java con licencia en dólares que tienen este tipo de problema con sus herramientas de línea de comandos).


CLASSPATH es una variable de entorno (es decir, variables globales del sistema operativo disponible para todos los procesos) necesaria para que el compilador y el tiempo de ejecución de Java 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 de CMD para encontrar los programas ejecutables.

CLASSPATH se puede configurar de 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


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 Java.


Configuración de la variable de sistema CLASSPATH

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

Para eliminar el contenido actual de la variable CLASSPATH, use estos comandos: En Windows: C:/> set CLASSPATH= En UNIX: % unset CLASSPATH; export CLASSPATH % unset CLASSPATH; export CLASSPATH

Para configurar la variable CLASSPATH, use estos comandos (por ejemplo): En Windows: C:/> set CLASSPATH=C:/users/george/java/classes En UNIX: % CLASSPATH=/home/george/java/classes; export CLASSPATH % CLASSPATH=/home/george/java/classes; export CLASSPATH


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

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


La ruta de clase es la ruta en la que la Máquina Virtual de Java busca clases, paquetes y recursos definidos por el usuario en los programas de Java.

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


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

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


Se puede llamar directamente al miembro estático de una clase sin crear una instancia de objeto. Dado que el método principal es estático, la Máquina virtual Java puede llamarlo sin crear ninguna instancia de una clase que contenga el método principal, que es el punto de inicio del programa.


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. la ruta de clase tiene una ruta predeterminada un punto (.) que significa el directorio actual. pero cuando usaste los paquetes. ¡u especificaría la ruta completa del archivo .class o colocaría la ruta del archivo .class en la ruta de clases, lo que ahorraría muchos trabajos!