2010-03-14 8 views
31

He leído la documentación de Sun y muchas publicaciones sobre Stack Overflow, pero todavía estoy confundido acerca de las diferencias entre las opciones del compilador Java -cp y -sourcepath.Diferencias entre las opciones classpath y sourcepath de javac

Let decir que tengo esta estructura de directorios:

c:\Java\project1\src (where the Java source files are) 
c:\Java\project1\bin (where the Java class files will be or already are) 

de Vamos también decir que tengo un archivo de origen MainClass.java en un paquete com.mypackage, y que la estructura de directorios está bien en la carpeta de origen.

estoy en el directorio de proyecto 1 y ejecute:

javac -d bin -sourcepath src src/com/mypackage/MainClass.java 

o

javac -d bin -classpath src src/com/mypackage/MainClass.java 

y obtener el mismo resultado. En modo detallado, la ruta de búsqueda para los archivos fuente es src en ambos casos.

Sería genial si alguien pudiera ayudarme a descubrir los detalles de estas opciones.

Respuesta

21
-classpath classpath 

Establezca la ruta de la clase de usuario, anulando la ruta de la clase de usuario en la variable de entorno CLASSPATH. Si no se especifica CLASSPATH o -classpath, la ruta de la clase de usuario consta del directorio actual.

Si no se especifica la opción -sourcepath, se busca en la ruta de la clase de usuario los archivos de origen y de clase.

-sourcepath sourcepath 

Especificar la ruta de código fuente para buscar las definiciones de clase o interfaz. Al igual que con la ruta de la clase de usuario, las entradas de la ruta de origen están separadas por punto y coma (;) y pueden ser directorios, archivos JAR o archivos ZIP. Si se utilizan paquetes, el nombre de ruta local dentro del directorio o archivo debe reflejar el nombre del paquete.

Tenga en cuenta que las clases que se encuentran a través del classpath están sujetas a recompilación automática si se encuentran sus orígenes.

+2

Gracias por su respuesta. La última oración es lo que estaba buscando: recompilación automática de los archivos fuente encontrados en el cp. ¡Verifiqué la fecha de modificación de los archivos .class en el directorio bin y sigue este principio! Aquí está la gran diferencia entre las 2 opciones. El tiempo de compilación también da esta pista. ¡Gracias! – Alex

7
  • SourcePath es dónde está la raíz de su código para compilar
  • ruta de clase lata contiene su código, sino también las librerías que necesitan
+0

Gracias por su respuesta. – Alex

4

CLASSPATH indica al compilador y el cargador de clases dónde buscar la archivos .class que necesita

Sourcepath es algo que no uso tanto. Creo que es opcional, porque generalmente el directorio actual es el sourcepath. CLASSPATH no lo es.

1
  • ruta de clases se busca en la clase (.class) Archivos
  • SourcePath se busca en los archivos fuente (.java) (.a.k.una clase o interfaz definiciones)

Sin embargo, si no se especifica SourcePath, la ruta de clase se buscaron los dos archivos de clase y los archivos de origen.

Esto me lleva a creer que casi siempre podemos mantener las cosas simples al usar solo classpath, y al evitar sourcepath por completo.

Las personas que necesitan usar tanto classpath como sourcepath probablemente se dirijan a contenidos de directorios extraños. Por ejemplo, pueden tener una carpeta que contenga archivos de origen y de clase, pero solo quiere que se busquen los archivos de origen.

Cuestiones relacionadas