Apa perbedaan antara menjalankan aplikasi Java dengan java -cp CLASSPATH
dan java -jar JAR_FILE_PATH
? Apakah salah satunya lebih disukai daripada yang lain untuk menjalankan aplikasi Java? Maksud saya, cara mana yang lebih mahal untuk JVM (menurut penggunaan sumber daya mesin mereka)?
Manakah yang akan menyebabkan JVM menelurkan lebih banyak utas saat mencoba menjalankan aplikasi?
Dengan
-cp
argumen Anda memberikan jalur kelas yaitu jalur ke kelas atau pustaka tambahan yang mungkin diperlukan oleh program Anda saat sedang dikompilasi atau dijalankan. Dengan-jar
Anda menentukan file JAR yang dapat dieksekusi yang ingin Anda jalankan.Anda tidak dapat menentukan keduanya. Jika Anda mencoba menjalankannya
java -cp folder/myexternallibrary.jar -jar myprogram.jar
maka itu tidak akan berhasil. Jalur kelas untuk JAR tersebut harus ditentukan dalam Manifesnya, bukan sebagai-cp
argumen.Anda dapat menemukan lebih banyak tentang ini di sini dan di sini .
PS:
-cp
dan-classpath
merupakan sinonim.sumber
-cp
dan-classpath
, maka tidak, tidak ada perbedaan.-jar
Anda menentukan JAR yang dapat dieksekusi yang ingin Anda jalankan. Dengan-cp
Anda menentukan jalur ke kelas / pustaka tambahan yang mungkin diperlukan oleh program Anda. Keduanya memiliki tujuan yang sangat berbeda.java -jar PATH -cp PATH2
Saat menggunakan
java -cp
Anda diminta untuk memberikan nama kelas utama yang memenuhi syarat, misalnyajava -cp com.mycompany.MyMain
Saat menggunakan
java -jar myjar.jar
file jar Anda harus memberikan informasi tentang kelas utama melalui manifest.mf yang terdapat di dalam file jar di folderMETA-INF
:Main-Class: com.mycompany.MyMain
sumber
java -cp CLASSPATH diperlukan jika Anda ingin menentukan semua kode di classpath. Ini berguna untuk men-debug kode.
Format yang
java -jar JarFile
dapat dieksekusi dengan jarred: dapat digunakan jika Anda ingin memulai aplikasi dengan satu perintah singkat. Anda dapat menentukan file jar dependen tambahan di MANIFEST Anda menggunakan botol yang dipisahkan spasi di entri Class-Path, misalnya:Keduanya sebanding dalam hal performa.
sumber
Seperti yang sudah dikatakan, -cp hanya untuk memberi tahu jvm di baris perintah kelas mana yang akan digunakan untuk utas utama dan di mana ia dapat menemukan perpustakaan (mendefinisikan jalur kelas). Dalam -jar, class-path dan main-class akan ditentukan dalam manifes file jar. Jadi yang lain adalah untuk mendefinisikan hal-hal dalam baris perintah sementara yang lain menemukannya di dalam manifes jar. Tidak ada perbedaan kinerja. Anda tidak dapat menggunakannya secara bersamaan, -jar akan mengganti -cp.
Meskipun Anda menggunakan -cp, itu masih akan memeriksa file manifes. Jadi, Anda dapat menentukan beberapa jalur kelas di manifes dan beberapa di baris perintah. Ini sangat berguna ketika Anda memiliki ketergantungan pada beberapa jar pihak ke-3, yang mungkin tidak Anda sediakan dengan build Anda atau tidak ingin Anda sediakan (berharap itu sudah ditemukan di sistem tempat ia akan diinstal misalnya). Jadi Anda bisa menggunakannya untuk menyediakan stoples eksternal. Lokasinya dapat bervariasi antar sistem atau bahkan mungkin memiliki versi yang berbeda pada sistem yang berbeda (tetapi memiliki antarmuka yang sama). Dengan cara ini Anda dapat membuat aplikasi dengan versi lain dan menambahkan dependensi pihak ketiga yang sebenarnya ke jalur kelas pada baris perintah saat menjalankannya pada sistem yang berbeda.
sumber
Tidak akan ada perbedaan dalam hal performa. Menggunakan java - cp kita dapat menentukan kelas dan jar yang diperlukan di jalur kelas untuk menjalankan file kelas java.
Jika itu adalah file jar yang dapat dieksekusi. Ketika perintah java -jar digunakan, jvm menemukan kelas yang perlu dijalankan dari file /META-INF/MANIFEST.MF di dalam file jar.
sumber