2011-12-06 26 views
6

Bildiride ana sınıfa işaret eden bir jar dosyası var. aşağıdaki komutu kodu yürütür ve işlerijava -jar seçeneği, sınıf yolu seçeneklerini değiştirir

java -cp .;./* com.foo.MainClass 

kullanarak kavanozu yürütmeye çalıştığınızda.

aşağıdaki komutunu kullanarak kavanozu yürütmeye çalıştığınızda

java -cp .;./* -jar myjar.jar 

Dersim olsun myjar.jar aynı klasörde bazı kavanozlar için bulunan execptions. -cp seçeneğinin bu yolları sınıf yolunda içereceğini umuyordum. java.class.path özelliğini yazdırmak için kodumu değiştirdim. İlk durumda, geçerli dizindeki tüm kavanozları listeledi, ikinci durumda, sadece myjar.jar olarak listelendi.

Ayrıca, tüm jarlarla Class-Path öğesi eklemek için manifest değiştirdim. Sonra ikinci komut çalışır. Ama benim kodumda, komut isteminde adı verilen bir sınıf sınıfı yüklemeye çalışıyorum, bu yüzden sınıf yolunun bir klasördeki tüm kavanozları içermesini istiyorum. Bu senaryoda ikinci komut çalışmasını nasıl yapabilirim? this kaynaktan

+0

[OneJar] 'a bakın (http://one-jar.sourceforge.net/). Bu CP sorunlarınızı çözmelidir. – flash

+0

@flash: Muhtemelen değil. Derleme zamanında ekstra sınıf yolunu bilmediğini söylüyor (aksi takdirde bunu yalnızca manifestoya ekleyebilir). – Thilo

+1

Kendi classloader'ınızı kullanmanız gerektiği gibi geliyor (bu da çevreye göre yeniden bir şeyler ekliyor). – Thilo

cevap

6

,

bir çalıştırılabilir JAR bu bildirim dosyasının Sınıf-Yol başlığı sayesinde gerektiren tüm diğer bağımlı kavanozları başvurmalıdır. ortam değişkeni CLASSPATH ve komut satırında belirtilen herhangi bir sınıf yolu, -jar seçeneği kullanılıyorsa JVM tarafından dikkate alınmaz.

+0

Teşekkürler! Bu, jar dosyası benim jar dosyasıyla aynı yerde bulunan (ve manifestimde belirtilmeyen) bir sınıfsal sınıf yüklemek istiyorsanız, bu jar'u açıkça yüklemek için URLClassLoader kullanmam gerektiğini mi kastediyorum? – mihirg

+0

Peki, manifest sınıf yolunuza 'plugins/*' gibi bir şey ekleyebilirsiniz. Kavanoz dosyaları için klasör sabit olacaktı, ancak oradaki tüm kavanozlar alınmalıydı. – Thilo

+0

Ya da belki de değil: "Ancak, Sınıf yolu jar manifest üstbilgisinde sınıf yolu joker karakterleri onurlandırılmaz." :-( – Thilo

0

Bununla başa çıkmak için kendi sınıf yükleyicinize ihtiyacınız olacak. -jar sadece Manifest'teki bilgilere saygı duyar ve joker karakterlerin burada bulunmasına izin verilmez.

Sen kullanışlı bir reloadable sınıfın örneğini bulabilirsiniz: http://www.exampledepot.com/egs/java.lang/ReloadClass.html

0

Here bu konuda iyi bir tartışmadır.

İlgili konular