2010-02-15 40 views
6

JAR dosyasına bu bağımlılıkları eklemeden dış bağımlılıklar gerektiren bir JAR dosyası oluşturmak mümkün mü?Dış bağımlılıkları eklemeden JAR dosyası oluştur

Benim google-fu'm bana bir cevap veremedi; bulduğum her şey onları JAR dosyasına nasıl ekleyeceğimi gösterir, ancak "Onları almadım, kullanıcının sınıf yoluna bakma" ifadesinin ne yazılacağını değil. Bağımlılıkların kullanıcının sınıf yolunda düzgün şekilde yüklendiğini ve yapılandırılacağını varsayardım. Benim durumumda, bağımlılığım Apache Commons CLI ve Math'dır.


Düzenleme: benim JAR dosyası içinde ben Main.class var. Ben /lib yılında JAR bağımlılıkları dahildir ve beyannamesine hattını Class-Path: lib/commons-math-2.0.jar lib/commons-cli-1.2.jar eklerseniz

Manifest-Version: 1.0 
Created-By: 1.6.0 (Sun Microsystems Inc.) 
Main-Class: Main 

Benim CLASSPATH'E sonra oluyor,

.;C:\Program Files\Java\jre1.6.0_06\lib\ext\QTJava.zip;C:\java_lib\commons-cli-1.2.jar;C:\java_lib\commons-math-2.0\commons-math-2.0.jar 

benziyor: gibi

Benim bildirim dosyası görünüyor iş.

Bildirimin işe yarayıp yaramadığını görmek için JAR'daki dosyaları eklemeden manifestoya Class-Path: commons-math-2.0.jar commons-cli-1.2.jar eklemeyi denedim, ancak yapmadı.

cevap

3

JAR'nize göre bağımlılıkları nerede arayacağınızı öğrenmek için META-INF/MANIFEST.MFClass-Path girişini kullanın. Örneğin:

Class-Path: servlet.jar ../foo/bar.jar acme/beans.jar 
+0

ama nerede olduklarını bilmiyorum, bunların dışında kullanıcının bilgisayarının sınıfında var. – masher

+0

@masher Her şeyi bir zip içinde Bundle böylece konum kontrolü var. Else, bu sadece senin için değil. Daha iyi bir şekilde, kullanıcının bu durumda sınıf yolunu manuel olarak ayarlamasını isteyin. –

+0

@masher: Nerede olduklarını bilmiyorsanız, hepsini listelememelisiniz, ancak kullanıcının bunları kavanozunuzun yanındaki sınıf yoluna koyması gerektiğini belgelemeniz gerekir. – Fredrik

3

Bu kesinlikle mümkündür. Bunu düşünmenin bir yolu, bir kavanoz her oluşturduğunuzda, jre'deki sınıflara bağlı olmanız ve bunları kavanozunuza dahil etmeniz gerekmez. Jre otomatik olarak onları sınıf yolunda arar. Bulunmazlarsa NoClassDefFoundError göreceksiniz.

+2

+1. Akf'ın dediği gibi, kullanıcının sınıf yolu doğru olduğu sürece hiçbir şey yapmanıza gerek yok. Bildirime girişler, sınıf yoluna eklemek için bir yoldur. –

+0

Bir şey yapmamam gerektiğini görebiliyorum, sadece işe yaramayacağım! Ah, bu özel durumda, sadece ~ 130 kB ek, bu yüzden JAR ... – masher

+0

kütüphaneleri dahil ile yaşayabilir ve sınıf yolunda java komut satırında bağımlılıklarını tanımlıyor musunuz? – akf

İlgili konular