2011-01-21 25 views
7

Programın yürütülmesi sırasında ek kavanozlardan faydalanmam gerekiyor. Kavanozları göreceli ./lib klasörüne el ile ekledikten sonra programı yürütün. Bildiri dosyasındaki sınıf yolunu nasıl tanımlamalıyım?Java manifest sınıf yolunda düzenli ifade nasıl kullanılır?

+0

Bir çözüm buldum! Sınıf Yolu: lib/externaljar1.jar lib/externaljar2.jar gibi değişkenleri 5 veya 10 değerine kadar ekleyeceğim. Daha sonra, çalışma zamanı boyunca kavanozlar dahil edilirken, hasta sadece externaljar1, externaljar2 vb. Olarak yeniden adlandırılır ve lib klasörüne kopyalanır. ;-) – Suraj

+0

Sorguma cevap veren herkese teşekkür ediyorum. Çok teşekkürler! – Suraj

cevap

11

Bildirimlerinizin Class-Path özniteliğinde normal ifadeleri veya diğer joker karakterleri kullanamazsınız.

Sadece bir desteklenen joker Java, ve bu sadece (yani -jar kullanarak değil) bir "el" java çağırma komut satırında belirtilmişse çalışır: using directoryname/*.

+0

-cp komutunu veya classloader işlevini kullanmak dışında başka bir yaklaşım var mı? – Suraj

+0

@Suraj: Bu yaklaşımların sizin için neden iyi olmadığını bize söylemeden diğer yaklaşımları sormak ... oldukça anlamsız. Ve kişisel olarak, ben de oldukça kaba buluyorum. –

+0

Bunun için üzgünüm! Aslında, kullanıcı dostu bir yaklaşım için kodu programlıyorum ve çalıştırılabilir bir jar içerisine yerleştiriyorum. Kullanıcının kendi veritabanını seçebileceği genel bir veritabanına sahip olmaktır. Böylece ihtiyaç duyulan bağlantı kavanozunu belirtmeli ve bunu programın erişilebilir klasörüne koymalıdır. Düzenli bir ifadeyi lib/* OR lib/*. Jar gibi manifest sınıfında kullanabilseydim, böylece program yürütüldüğünde tüm kavanozları bulur. – Suraj

2

tüm tam olarak ne istediğini çok emin değilim ama çalışma sırasında kavanozları ekleyebilirsiniz: kavanoz içeren dizinde File.list() kullanarak

  • listesi (kavanoz) dosyaları
  • Eğer
  • ana classloader için kavanoz I (gerekirse) kayıt tam olarak nasıl bilmiyorum

URLClassLoaders yüklemek için bir URLClassLoader kullanmak almak dosya adlarına bir düzenli ifade yok. Ama sanırım böyle giderim.

+2

Önyükleme sınıfı sınıf yükleyicisini, (addURL() ') kullanarak yapabilecek çirkin kesimler var. Spesifik bir çözüm, sadece boostrapping sınıfını kendi kavanozuna koymak, diğer tüm kavanozları ("gerçek" ana kavanoz dahil) bulmak ve hepsini bir classloader'a yüklemek için kullanmaktır. Daha sonra gerçek ana metodu gerçek ana sınıftan arayın. –