Kısa Form: Ana alanınız bir kavanozun içindeyse, muhtemelen ('YourJarsName.jar' sınıf yolunda olsa da) açıkça çalışmak için bildirilen ek bir '-jar pathTo / yourJar / YourJarsName.jar' gerekir. , 5 yıl önce sorulan orijinal soruyu cevaplamak için ifade edildi: her bir kavanozu açıkça yeniden tanımlamanız gerekmez, ancak java6 ile bile kendi kavanozunuzu yeniden tanımlamanız gerekir ...)
Uzun Form: (Bunu java'ya müdahale edenlerin bile bundan yararlanabileceğini umduğum bir noktaya getirdim)
Burada birçokları gibi kavanozları dışa aktarmak için eclipse kullanıyorum: (Dosya-> Dışa Aktar -> 'Çalıştırılabilir JAR Dosyası'). 'Kütüphane kullanımı' tutulma (Juno) teklifleri için üç seçenek vardır:
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"
Tipik olarak ben opt2 kullanmak istiyorsunuz (ve opt1 kesinlikle kırıyordu), ancak kullandığım kavanozlardan birinde yerel kod, bu seçeneği seçtiğinizde tutulma kaldıraçları kullanışlı "jarinjar" hile ile keşfetti. Opt3'e ihtiyacım olduğunu fark ettikten ve hatta bu StackOverflow girişini bulduktan sonra bile, ana tutucumun dışını nasıl açacağımı anlamaya çalışmak biraz zaman aldı, bu yüzden başkaları için yararlı olduğu için benim için işe yarayan şey ...
Jar'nizi adlandırdıysanız: "fooBarTheJarFile.jar" ve tümü dir: "/ theFully / qualPath / toYourChosenDir" dizinine aktarılacak şekilde ayarlanmışsa.
('Hedefi dışa aktar' alanı şu anlama gelir: '/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar')
Finish tuşuna bastıktan sonra, eclipse yazdıktan sonra tüm kütüphaneleri bu dışa aktarma dizininde 'fooBarTheJarFile_lib' adlı bir klasöre koyar ve size şöyle bir şey verir:
/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
Daha sonra sisteminizdeki herhangi bir yerden aşağıdakilerle başlatabilirsiniz:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(Java Newbies için: 'package.path_to.the_class_with.your_main', 'main (String [] argümanlarını) içeren' TheClassWithYourMain.java 'dosyasının üstünde bulacağınız bildirilen paket yoludur. .} 'java dışından çalıştırmak istediğiniz)
Dikkat edilmesi gereken bir tuzak: beyan edilen sınıf yolunuzdaki kavanozlar listesinde 'fooBarTheJarFile.jar' olması yeterli değildir. Açıkça '-jar' bildirmeniz ve bu kavanozun yerini yeniden bildirmeniz gerekir.
örneğin, bu kesiliyor:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
göreli yollarla yeniden ifade edildi:
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
(Java sürümü "1.6.0_27" kullanarak; Ubuntu 12.04'te OpenJDK 64-Bit Sunucu VM ile)