Saya telah menyusun file JAR dan menentukan Kelas-Utama dalam manifes (saya menggunakan fungsi Ekspor Eclipse ). Semua dependensi saya ada di direktori berlabel lib
. Sepertinya saya tidak bisa mendapatkan jawaban langsung tentang cara mengeksekusi file JAR saya sementara menentukannya harus menggunakan lib/*
sebagai classpath.
Saya sudah mencoba:
]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main
dll ...
Masing-masing memberikan kesalahan yang mengatakan:
Error: Could not find or load main class ....
atau memberi NoClassDefFoundError
indikasi bahwa perpustakaan tidak ditemukan.
Saya bahkan mencoba membuat ulang file JAR dan memasukkan lib
direktori dan isinya, tetapi tetap tidak ada dadu ...
Bagaimana saya dapat menjalankan file JAR dari baris perintah dan menentukan classpath yang akan digunakan?
java
shell
command-line
classpath
SnakeDoc
sumber
sumber
Jawaban:
Jika Anda tentukan
-jar
,-cp
parameter akan diabaikan.Dari dokumentasi :
Anda juga tidak dapat "menyertakan" file jar yang diperlukan ke dalam file jar lain (Anda perlu mengekstrak isinya dan memasukkan file .class ke dalam file jar Anda)
Anda memiliki dua pilihan:
lib
direktori ke dalam manifes (Anda dapat menggunakan jalur relatif di sana)-cp
:java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
sumber
unzip MyJar.jar lib/*.jar
. Kemudian, seperti yang Anda sarankan, mereka dapat berlarijava -cp MyJar.jar:lib/* ...
Jalankan file jar dan tentukan jalur kelas seperti ini:
jar_name.jar
adalah nama lengkap JAR yang ingin Anda jalankanlibs/*
adalah jalur ke JAR ketergantungan Andacom.test.App
adalah nama kelas yang sepenuhnya memenuhi syarat dari JAR yang memilikimain(String[])
metodeJar dan jar dependen harus memiliki izin eksekusi.
sumber
Anda dapat melakukan ini di unix shell:
Anda dapat melakukan ini di windows PowerShell:
sumber
Atau, gunakan manifes untuk menentukan jalur-kelas dan kelas-utama jika Anda mau, jadi Anda tidak perlu menggunakan
-cp
atau menentukan kelas utama. Dalam kasus Anda, itu akan berisi baris seperti ini:Sayangnya, Anda perlu mengeja setiap jar dalam manifes (bukan masalah besar karena Anda hanya melakukannya sekali, dan Anda dapat menggunakan skrip untuk membuat file atau menggunakan fitur build seperti ANT atau Maven atau Gradle). Dan referensinya harus berupa direktori relatif atau absolut tempat Anda menjalankan file
java -jar MyJar.jar
.Kemudian jalankan dengan
sumber
Anda bisa melakukan Runtime.getRuntime.exec (perintah) untuk meluncurkan kembali jar termasuk classpath dengan args.
sumber