SORU
20 EKİM 2008, PAZARTESİ


Java sınıf yolu içinde birden fazla kavanoz ayarı

Bir şekilde sınıf bir dizin içindeki bütün jar dosyalarını dahil etmek var mı?

java -classpath lib/*.jar:. my.package.Program çalışıyorum ve kesinlikle o kavanozlarda sınıfını dosyaları bulmak mümkün değildir. Sınıf için her jar dosyasını ayrı ayrı eklemeye gerek var mı?

CEVAP
20 EKİM 2008, PAZARTESİ


Java 6 veya daha sonra, sınıf seçeneği joker destekler. Aşağıdakilere dikkat edin:

  • Düz tırnak işaretleri (") kullanın
  • *, *.jar

Windows

java -cp "Test.jar;lib/*" my.package.MainClass

Unix

java -cp "Test.jar:lib/*" my.package.MainClass

Bu Windows için benzer, ancak ; yerine : kullanır. Eğer kullanamıyorsanız joker, bash aşağıdaki sözdizimi lib dizinin tüm Java arşiv dosyaları içeren) sağlar:

java -cp $(echo lib/*.jar | tr ' ' ':')

(Bir sınıf kullanarak -jar seçeneği ile uyumsuzdur. Ayrıca bakınız: Execute jar file with multiple classpath libraries from command prompt)

Anlayış Joker

Classpath belge:

Yol girdileri sınıf basename joker karakter içeren tüm dosyaların listesini belirtmek için eşdeğer olarak kabul edilir *, uzantısı .jar .JAR ile dizin. Örneğin, sınıf yolu giriş 15 ** adlı dizin içindeki bütün JAR dosyaları belirtir foo. Sınıf girişi sadece oluşan * tüm listesi için genişletir kavanoz geçerli dizindeki dosyaları.

* içeren sınıf bir yol girişi sınıf dosyaları eşleşmez. İçin tek bir dizin foo hem sınıflar ve JAR dosyaları da seçebilirsiniz foo;foo/* foo/*;foo. Sipariş seçilmiş olup olmadığını belirler foo sınıflar ve kaynakları KAVANOZ önce yüklenen 21 ** veya dosyaları tam tersi.

Alt dizinleri özyinelemeli olarak arama yapılmaz. Örneğin, foo/* arar foo/bar, foo/baz, vb foo, sadece için JAR dosyaları.

Hangi KAVANOZ bir dizindeki dosyaların düzeni içinde sayılmıştır genişletilmiş sınıf yol belirtilmezse ve platform farklılık gösterebilir platform ve hatta aynı makinede şu andan itibaren. Bir iyi yapılandırılmış uygulama belirli bir bağımlı olmamalıdır sipariş. Eğer özel bir sipariş sonra JAR dosyalarını olabilir gerekirse sınıf yolu açıkça numaralandırılmış.

Joker genişlemesi erken bir çağırma önce yapılır programın ana yöntem, yerine geç, sınıf-yükleme sırasında kendisi süreci. Giriş sınıfı, yolun her element içeren bir joker elemanları (büyük olasılıkla boş) sırası ile değiştirilir numaralandırma tarafından oluşturulan JAR adlı dizin içindeki dosyalar. İçin foo a.jar, b.jar c.jar içerir dizin ise, 30* *sınıf yolu foo/a.jar;foo/b.jar;foo/c.jardönüştü. ve bu dizi sistem özelliğinin değeri olurdu java.class.path.

CLASSPATH ortam değişkeni herhangi bir farklı muamele değil -classpath (ya da -cp) komut satırı seçeneği. Yani, joker vardır bütün bu durumlarda onur. Ancak, sınıf yolunu joker değildir Class-Path jar-manifest Başlığı onur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Paul Schroder

    Paul Schrode

    30 Kasım 2007
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006
  • Virtual Riot

    Virtual Riot

    19 Mayıs 2011