Pregunta Diferencias entre las opciones classpath y sourcepath de javac


Leí la documentación de Sun y muchas publicaciones sobre Stack Overflow, pero todavía estoy confundido sobre las diferencias entre las opciones del compilador de Java -cp y -sourcepath.

Digamos que tengo esta estructura de directorio:

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

Digamos también que tengo un archivo fuente MainClass.java en un paquete com.mypackage, y que la estructura del directorio está bien en la carpeta fuente.

Estoy en el Proyecto 1 directorio y ejecutar:

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

o

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

y obtengo 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.


32
2018-03-14 09:54


origen


Respuestas:


 -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 fuente y los archivos de clase.

-sourcepath sourcepath

Especifique la ruta del código fuente para buscar 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 fuentes.


23
2018-03-14 10:00



  • sourcepath es donde está la raíz de tu código para compilar
  • classpath puede contener tu código pero también las bibliotecas que necesitas

8
2018-03-14 09:57



CLASSPATH le dice al compilador y al cargador de clases dónde buscar los 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.


4
2018-03-14 09:58



  • classpath se busca archivos de clase (.class)
  • sourcepath se busca archivos de origen (.java) (.a.k.a clase o interfaz definiciones)

Sin embargo, si sourcepath NO está especificado, se busca en classpath los archivos de clase Y los archivos fuente.

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.


1
2018-01-21 21:13