Apa perbedaan antara Jalur Kelas dan Jalur Bangun

86

Saya bingung dengan dua istilah ini.

Juga apa yang harus saya lakukan untuk membuat file di bawah folder src dari Proyek Spring MVC? Ketika saya membuat menggunakan objek File itu membuat file di dalam C: \ SpringSourceTool ... Saya rasa ini adalah ClassPath kan?

Bagaimana saya bisa mendapatkan applicationcontextfolder atau root dari aplikasi tersebut?

mehmet6parmak.dll
sumber

Jawaban:

101

Jalur build digunakan untuk membangun aplikasi Anda. Ini berisi semua file sumber Anda dan semua pustaka Java yang diperlukan untuk mengkompilasi aplikasi.

The classpath digunakan untuk mengeksekusi aplikasi. Ini termasuk semua kelas dan pustaka java yang diperlukan untuk menjalankan aplikasi java. Sebuah jalur kelas wajib, jalur default .yang digunakan jika mesin virtual java tidak dapat menemukan jalur yang ditentukan pengguna. ( CLASSPATHvariabel lingkungan, -cpbendera atau Class-Path:atribut dalam manifes jar)

Andreas Dolk
sumber
Tapi javac menggunakan argumen classpath. Bisakah seseorang mengatakan bahwa parameter ini "kelebihan beban" untuk menentukan jalur build?
aioobe
4
Tidak. Argumen classpath adalah petunjuk bagi kompilator apa yang diharapkan akan tersedia / disediakan pada waktu proses, karena Anda tidak membangun setiap kelas yang Anda gunakan sendiri (misalnya JFC, Libraries, ...). The buildpath mengandung sumber dan / atau sumber / disusun dependensi dan di mana untuk mencari mereka.
Johannes Wachter
Saat mengembangkan plugin, saya menambahkan semua pustaka yang diperlukan ke classpath, tetapi tidak dapat mengimpor apa pun. Eclipse tidak melihatnya sampai saya menambahkannya ke jalur pembuatan.
Bax
51

Classpath adalah cara konvensional untuk memberi tahu compiler Java (standar) dan runtime Java di mana menemukan class yang dikompilasi. Biasanya ini adalah urutan nama file JAR dan nama direktori. Classpath yang digunakan oleh compiler dan sistem runtime tidak harus sama, tetapi biasanya harus sama , terutama untuk project kecil.

Buildpath bukanlah terminologi Java standar. Ini adalah istilah untuk cara yang lebih kaya dimana IDE tipikal menentukan hubungan antara "proyek" yang membentuk sebuah aplikasi. IDE menggunakan ini untuk mengetahui classpath dan source untuk mengompilasi kode Java, dan classpath untuk menjalankannya. IDE juga menggunakan jalur build untuk mencari tahu cara mengemas kode Anda dan dependensinya sebagai (misalnya) file WAR.

Misalnya, jalur build Eclipse untuk suatu proyek menyertakan proyek lain yang bergantung padanya, dan mencantumkan JAR pustaka tambahan apa pun yang berisi / diandalkan oleh proyek tersebut. Ini juga mencantumkan paket dalam proyek saat ini yang dapat diandalkan oleh proyek hilir.

(Jika Anda menggunakan Maven untuk project Anda, mekanisme buildpath IDE adalah sekunder dari dependensi yang dideklarasikan dalam file POM. Misalnya, menggunakan Eclipse dengan m2eclipse, buildpath disintesis dari file POM.)

Stephen C
sumber
27

Jalur kelas digunakan pada waktu proses untuk memuat kelas dan sumber daya yang dikompilasi.

Jalur build digunakan pada waktu kompilasi untuk menemukan dependensi yang diperlukan untuk membangun project Anda.

KeatsPeeks
sumber
Bisakah Anda mengatakan bahwa jalur kelas digunakan untuk menemukan .classfile (dan sumber daya yang dikompilasi lainnya), sedangkan jalur build digunakan untuk menemukan file sumber yang perlu dikompilasi?
Adam
1
@Adam Saya tidak berpikir itu sepenuhnya benar. Jalur build memerlukan file .class untuk mengompilasi file sumber terkadang. Jadi, jalur build juga menggunakan jalur kelas di belakang layar. Jika Anda meluangkan waktu untuk mengkompilasi dan menjalankan proyek java menggunakan java CLI, Anda dapat melihat ini. Javac dan perintah java keduanya memiliki opsi jalur kelas karena keduanya mungkin membutuhkannya.
intrepistar_88
4

Setiap proyek Java memiliki jalur build-nya sendiri yang menentukan semua dependensi yang diperlukan untuk mengompilasi proyek. Dependensi tersebut mungkin berasal dari proyek Java lain di ruang kerja, dari arsip Java file .jar, atau dari folder yang berisi file .class.

Dalam lingkungan CLASSPATH Anda hanya perlu menentukan file .class (yaitu, jar, file zip - Di dalam jar, file zip Anda hanya akan menemukan kelas java) yaitu Anda membantu Java Virtual Machine (JVM) untuk menemukan file kelas Java

Juga apa yang harus saya lakukan untuk membuat file di bawah folder src dari Proyek MVC Spring? Ketika saya membuat menggunakan objek File, itu membuat file di dalam C: \ SpringSourceTool ...

Di sinilah JVM dimulai, jika Anda ingin membuat file di tempat lain, gunakan jalur relatif dari sini.

Lihat ini dan ini untuk info lebih lanjut.

pavanlimo.dll
sumber
Anda bahkan tidak menyebutkan jalur build dalam jawaban Anda.
aioobe
4

Saya ingin menambahkan jawaban Andreas_D untuk menjelaskan bahwa jalur build diperlukan oleh IDE / compiler untuk menemukan paket dan kelas eksternal yang digunakan oleh kode Anda. Kami terkadang menyebutnya sebagai 'ketergantungan' .

NB: Paket eksternal ini mungkin dikemas di dalam file .jar terkompresi atau memang, mungkin ada beberapa file jar yang dikemas di dalam 'perpustakaan' . Perpustakaan atau sekelompok perpustakaan sering kali membentuk 'kerangka kerja' .

Jika kode Anda memerlukan kode yang ditulis oleh orang lain, Anda dapat mengimpornya ke kelas Anda menggunakan importperintah. Namun, perintah ini sendiri tidak cukup karena compiler atau IDE perlu mengetahui di mana class tersebut berada. Anda menentukan ini di jalur build .

Di classpathsisi lain, memberi tahu JVM yang menjalankan aplikasi Anda di mana menemukan dependensi selama eksekusi kode Anda yang sebenarnya.

Juga yang perlu diperhatikan: Classpath untuk digunakan oleh JVM.

Buildpath untuk digunakan oleh IDE / compiler dan merupakan sarana untuk membangun classpath dari lingkungan pengembangan Anda. Saat Anda mengonfigurasi buildpath melalui IDE, Anda juga mengonfigurasi file tersembunyi dalam proyek Anda yang disebut .classpath. Ini digunakan untuk menyediakan jalur kelas ke JVM saat penerapan.

IqbalHamid
sumber
1

Classpath ( dari Wikipedia ):

Mirip dengan perilaku pemuatan dinamis klasik, saat menjalankan program Java, Java Virtual Machine menemukan dan memuat kelas secara malas (ini memuat bytecode kelas hanya saat kelas tersebut pertama kali digunakan). Classpath memberi tahu Java di mana harus mencari di sistem file untuk file yang mendefinisikan kelas-kelas ini.

Mesin virtual mencari dan memuat kelas dalam urutan ini:

kelas bootstrap: kelas yang fundamental untuk Platform Java (terdiri dari kelas publik dari Perpustakaan Kelas Java, dan kelas privat yang diperlukan untuk perpustakaan ini agar dapat berfungsi).

kelas ekstensi: paket yang ada di direktori ekstensi JRE atau JDK,

jre / lib / ext / paket dan pustaka yang ditentukan pengguna

Secara default, hanya paket API standar JDK dan paket ekstensi yang dapat diakses tanpa perlu menyetel di mana menemukannya. Jalur untuk semua paket dan pustaka yang ditentukan pengguna harus disetel di baris perintah (atau di Manifes yang terkait dengan file Jar yang berisi kelas).

Sederhananya - saat program Anda berjalan, JVM memuat kelas hanya jika diperlukan. Ketika sebuah kelas dibutuhkan, JVM akan bergantung pada classpath untuk mengetahui dari mana harus memuat bytecode (yaitu: .classfile).

Di sisi lain, jalur build biasanya digunakan oleh IDE, seperti Eclipse, untuk mengetahui tempat mencari library tambahan yang diperlukan untuk mengompilasi kode sumber proyek. Jalur build tidak digunakan selama runtime.

Tom O.
sumber