¿Cuál es la diferencia entre Class Path y Build Path?

86

Estoy confundido con estos dos términos.

Además, ¿qué debo hacer para crear un archivo en la carpeta src de un proyecto Spring MVC? Cuando creo usando un objeto File, crea el archivo dentro de C: \ SpringSourceTool ... Supongo que esto es ClassPath, ¿verdad?

¿Cómo puedo obtener la applicationcontextcarpeta o raíz de la aplicación?

mehmet6parmak
fuente

Respuestas:

100

La ruta de compilación se utiliza para compilar su aplicación. Contiene todos sus archivos fuente y todas las bibliotecas de Java que se requieren para compilar la aplicación.

La ruta de clase se utiliza para ejecutar la aplicación. Esto incluye todas las clases y bibliotecas de Java que se necesitan para ejecutar la aplicación Java. Una ruta de clase es obligatoria, la ruta predeterminada es la .que se utiliza si la máquina virtual Java no puede encontrar una ruta definida por el usuario. ( CLASSPATHvariable de entorno, -cpmarca o Class-Path:atributo en un manifiesto jar)

Andreas Dolk
fuente
Pero javac toma un argumento classpath. ¿Se podría decir que este parámetro "sobrecargado" para especificar la ruta de construcción?
aioobe
4
No. El argumento classpath es una pista para el compilador de lo que debe esperar que esté disponible / proporcionado en tiempo de ejecución, ya que no construye cada clase que usa usted mismo (por ejemplo, JFC, Bibliotecas, ...). La ruta de compilación contiene dependencias fuente y / o fuente / compiladas y dónde buscarlas.
Johannes Wachter
Mientras desarrollaba un complemento, agregué todas las bibliotecas necesarias a la ruta de clases, pero no pude importar nada. Eclipse no los vio hasta que los agregué para construir la ruta.
Bax
51

La ruta de clases es la forma convencional de decirle al compilador (estándar) de Java y al tiempo de ejecución de Java dónde encontrar las clases compiladas. Normalmente es una secuencia de nombres de archivos JAR y nombres de directorios. La ruta de clase utilizada por el compilador y el sistema de tiempo de ejecución no tienen que ser iguales, pero normalmente deberían serlo , especialmente para un proyecto pequeño.

Buildpath no es la terminología estándar de Java. Es el término para referirse a la forma más rica en que un IDE típico especifica la relación entre los "proyectos" que componen una aplicación. El IDE utiliza esto para averiguar la ruta de clase y la ruta de origen para compilar el código Java y la ruta de clase para ejecutarlo. El IDE también usa la ruta de compilación para descubrir cómo empaquetar su código y sus dependencias como (por ejemplo) un archivo WAR.

Por ejemplo, una ruta de construcción de Eclipse para un proyecto incluye los otros proyectos de los que depende y enumera los archivos JAR de biblioteca adicionales que el proyecto contiene o en los que se basa. También enumera los paquetes del proyecto actual de los que pueden depender los proyectos posteriores.

(Si está utilizando Maven para su proyecto, el mecanismo de ruta de compilación IDE es secundario a las dependencias declaradas en los archivos POM. Por ejemplo, al usar Eclipse con m2eclipse, la ruta de compilación se sintetiza a partir de los archivos POM).

Esteban C
fuente
27

La ruta de clases se usa en tiempo de ejecución para cargar clases y recursos compilados.

La ruta de compilación se usa en tiempo de compilación para encontrar las dependencias necesarias para compilar su proyecto.

KeatsPeeks
fuente
¿Podría decir que la ruta de clases se utiliza para localizar .class archivos (y otros recursos compilados), mientras que la ruta de compilación se usa para ubicar archivos fuente que deben compilarse?
Adam
1
@ Adam No creo que eso sea completamente cierto. La ruta de compilación necesita archivos .class para compilar archivos fuente a veces. Entonces, la ruta de compilación también usa la ruta de clases detrás de escena. Si se toma un tiempo para compilar y ejecutar un proyecto java usando la CLI de java, puede ver esto. El comando javac y java tienen una opción de ruta de clase porque ambos pueden necesitarla.
intrepistar_88
4

Cada proyecto Java tiene su propia ruta de compilación que especifica todas las dependencias necesarias para compilar el proyecto. Esas dependencias pueden provenir de otros proyectos Java en el espacio de trabajo, de archivos Java .jar o de carpetas que contienen archivos .class.

En el entorno CLASSPATH, debe especificar solo archivos .class (es decir, archivos jar, zip; dentro de los archivos jar, zip encontrará solo clases java) es decir, está ayudando a Java Virtual Machine (JVM) a encontrar archivos de clase Java

Además, ¿qué debo hacer para crear un archivo en la carpeta src de un proyecto Spring MVC? Cuando creo usando un objeto File, crea el archivo dentro de C: \ SpringSourceTool ...

Aquí es donde se inició la JVM, si desea crear el archivo en otro lugar, use la ruta relativa desde aquí.

Vea esto y esto para más información.

pavanlimo
fuente
Ni siquiera mencionaste construir ruta en tu respuesta.
aioobe
4

Me gustaría agregar a la respuesta de Andreas_D para explicar que el IDE / compilador requiere la ruta de compilación para ubicar paquetes y clases externos utilizados por su código. A veces nos referimos a estos como "dependencias" .

NB: Estos paquetes externos pueden estar empaquetados dentro de un archivo .jar comprimido o, de hecho, puede haber varios archivos jar empaquetados dentro de una 'biblioteca' . Una biblioteca o un grupo de bibliotecas a menudo constituyen un 'marco' .

Si su código requiere código escrito por otros, puede importarlos a su clase usando el importcomando. Sin embargo, este comando por sí solo es insuficiente ya que el compilador o IDE necesita saber dónde se encuentran esas clases. Especifica esto en la ruta de construcción .

los classpath otro lado, le dice a la JVM que ejecuta su aplicación dónde encontrar las dependencias durante la ejecución real de su código.

También para tener en cuenta: Classpath es para uso de la JVM.

Buildpath es para uso del compilador IDE / y es un medio para construir classpath a partir de su entorno de desarrollo. Cuando configura su ruta de compilación a través de su IDE, también está configurando un archivo oculto en su proyecto llamado .classpath. Se utiliza para proporcionar la ruta de clase a la JVM en la implementación.

IqbalHamid
fuente
1

Classpath ( de Wikipedia ):

Al igual que en el comportamiento de carga dinámico clásico, al ejecutar programas Java, la máquina virtual Java busca y carga clases de forma perezosa (carga el código de bytes de una clase solo cuando la clase se usa por primera vez). La ruta de clases le dice a Java dónde buscar en el sistema de archivos los archivos que definen estas clases.

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

Clases bootstrap: las clases que son fundamentales para la Plataforma Java (que comprenden las clases públicas de la Biblioteca de clases Java y las clases privadas que son necesarias para que esta biblioteca sea funcional).

clases de extensión: paquetes que están en el directorio de extensión del JRE o JDK,

jre / lib / ext / paquetes y bibliotecas definidos por el usuario

De forma predeterminada, solo se puede acceder a los paquetes de la API estándar de JDK y los paquetes de extensión sin necesidad de establecer dónde encontrarlos. La ruta de todos los paquetes y bibliotecas definidos por el usuario debe establecerse en la línea de comandos (o en el manifiesto asociado con el archivo Jar que contiene las clases).

En pocas palabras, mientras su programa se está ejecutando, la JVM carga las clases solo según sea necesario. Cuando se necesita una clase, la JVM dependerá de la ruta de clase para saber desde dónde cargar el código de bytes (es decir:.class archivos).

La ruta de compilación , por otro lado, generalmente la usa un IDE, como Eclipse, para saber dónde buscar bibliotecas adicionales que se requieren para compilar el código fuente de un proyecto. La ruta de compilación no se usa durante el tiempo de ejecución.

Tom O.
fuente