Short Form: Jika main Anda berada di dalam toples, Anda mungkin memerlukan '-jar pathTo / yourJar / YourJarsName.jar' tambahan secara eksplisit dinyatakan untuk membuatnya berfungsi (meskipun 'YourJarsName.jar' ada di classpath) (atau , diekspresikan untuk menjawab pertanyaan awal yang diajukan 5 tahun lalu: Anda tidak perlu mendeklarasikan ulang setiap toples secara eksplisit, tetapi memang terlihat, bahkan dengan java6 Anda perlu mendeklarasikan toples Anda sendiri ...)
Long Form: (Saya sudah membuat ini eksplisit ke titik yang saya harap bahkan interlopers ke java dapat memanfaatkan ini)
Seperti banyak di sini saya menggunakan gerhana untuk mengekspor guci: (File-> Ekspor -> 'Runnable JAR File'). Ada tiga opsi pada penawaran 'Library handling' eclipse (Juno):
opt1: "Extract required libraries into generated JAR"
opt2: "Package required libraries into generated JAR"
opt3: "Copy required libraries into a sub-folder next to the generated JAR"
Biasanya saya akan menggunakan opt2 (dan opt1 benar-benar melanggar), namun kode asli di salah satu guci yang saya gunakan saya menemukan istirahat dengan trik "jarinjar" berguna yang memanfaatkan gerhana ketika Anda memilih opsi itu. Bahkan setelah menyadari bahwa saya memerlukan opt3, dan kemudian menemukan entri StackOverflow ini, saya masih butuh waktu untuk memikirkannya cara meluncurkan utama saya di luar gerhana, jadi inilah yang bekerja untuk saya, karena ini berguna bagi orang lain ...
Jika Anda memberi nama toples Anda: "fooBarTheJarFile.jar" dan semuanya diatur untuk diekspor ke dir: "/ theFully / kualifikasiPath / toYourChosenDir".
(artinya bidang 'Tujuan ekspor' akan bertuliskan: '/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar')
Setelah Anda menekan finish, Anda akan menemukan eclipse kemudian menempatkan semua pustaka ke dalam folder bernama 'fooBarTheJarFile_lib' dalam direktori ekspor itu, memberi Anda sesuatu seperti:
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar01.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar02.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar03.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar04.jar
Anda kemudian dapat meluncurkan dari mana saja di sistem Anda dengan:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(Untuk Java Newbies: 'package.path_to.the_class_with.your_main' adalah paket-path yang dideklarasikan yang akan Anda temukan di bagian atas file 'TheClassWithYourMain.sain' yang berisi argumen 'main (String []) {.. .} 'yang ingin Anda jalankan dari luar java)
Jebakan untuk diperhatikan: adalah memiliki 'fooBarTheJarFile.jar' dalam daftar toples di classpath yang Anda nyatakan tidak cukup. Anda harus secara eksplisit mendeklarasikan '-jar', dan mendeklarasikan ulang lokasi toples itu.
misalnya ini rusak:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
disajikan kembali dengan jalur relatif:
cd /theFully/qualifiedPath/toYourChosenDir/;
BREAKS: java -cp "fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" -jar package.path_to.the_class_with.your_main.TheClassWithYourMain
WORKS: java -cp ".;fooBarTheJarFile_lib/*" -jar fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(menggunakan versi java "1.6.0_27"; melalui OpenJDK 64-Bit Server VM di ubuntu 12.04)