Pertanyaan Perbedaan antara classpath dan opsi pathpath dari javac


Saya membaca dokumentasi Sun dan banyak posting di Stack Overflow, tapi saya masih bingung tentang perbedaan antara opsi compiler Java -cp dan -sourcepath.

Katakanlah saya memiliki struktur direktori ini:

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

Katakanlah saya juga memiliki file sumber MainClass.java dalam satu paket com.mypackage, dan bahwa struktur direktori ok di folder sumber.

Saya di dalam proyek1 direktori dan jalankan:

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

atau

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

dan saya mendapatkan hasil yang sama. Dalam mode verbose, jalur pencarian untuk file sumber adalah src dalam kedua kasus.

Akan lebih bagus lagi jika ada yang bisa membantu saya mengetahui secara spesifik pilihan-pilihan ini.


32
2018-03-14 09:54


asal


Jawaban:


 -classpath classpath

Setel jalur kelas pengguna, menimpa jalur kelas pengguna dalam variabel lingkungan CLASSPATH. Jika CLASSPATH atau -classpath tidak ditentukan, jalur kelas pengguna terdiri dari direktori saat ini.

Jika opsi -sourcepath tidak ditentukan, jalur kelas pengguna dicari untuk file sumber serta file kelas.

-sourcepath sourcepath

Tentukan jalur kode sumber untuk mencari definisi kelas atau antarmuka. Seperti dengan jalur kelas pengguna, entri jalur sumber dipisahkan oleh titik koma (;) dan dapat berupa direktori, arsip JAR, atau arsip ZIP. Jika paket digunakan, nama jalur lokal dalam direktori atau arsip harus mencerminkan nama paket.

Perhatikan bahwa kelas yang ditemukan melalui classpath tunduk pada rekompilasi otomatis jika sumber mereka ditemukan.


23
2018-03-14 10:00



  • Sourcepath adalah di mana root dari kode Anda untuk dikompilasi
  • classpath dapat berisi kode Anda tetapi juga pustaka yang Anda butuhkan

8
2018-03-14 09:57



CLASSPATH memberi tahu compiler dan kelas loader tempat mencari file .class yang dibutuhkan.

Sourcepath adalah sesuatu yang tidak begitu saya gunakan. Saya yakin itu opsional, karena biasanya direktori saat ini adalah sumbernya. CLASSPATH tidak.


4
2018-03-14 09:58



  • classpath dicari untuk file kelas (.class)
  • sourcepath dicari untuk file sumber (.java) (.a.k.a kelas atau antarmuka definisi)

Namun, jika path sumber TIDAK ditentukan, classpath dicari untuk file kelas dan file sumber.

Hal ini membuat saya percaya bahwa kita hampir selalu dapat menjaga hal-hal sederhana dengan hanya menggunakan classpath, dan dengan menghindari path path sama sekali.

Orang yang perlu menggunakan kedua classpath dan sourcepath mungkin menargetkan isi direktori yang aneh. Misalnya, mereka mungkin memiliki folder yang berisi file sumber dan file kelas, tetapi hanya ingin memiliki file sumber yang dicari.


1
2018-01-21 21:13