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
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çebilirsinizfoo;foo/*
foo/*;foo
. Sipariş seçilmiş olup olmadığını belirlerfoo
sınıflar ve kaynakları KAVANOZ önce yüklenen 21 ** veya dosyaları tam tersi.Alt dizinleri özyinelemeli olarak arama yapılmaz. Örneğin,
foo/*
ararfoo/bar
,foo/baz
, vbfoo
, 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 yolufoo/a.jar;foo/b.jar;foo/c.jar
dönüştü. ve bu dizi sistem özelliğinin değeri olurdujava.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ğildirClass-Path jar-manifest
Başlığı onur.
Java: bir dosya içinde Birden fazla sı...
Bir java dosyasında birden fazla sınıf...
Nasıl sınıf bir joker birden fazla kav...
Java, Sınıf, => Classloading; aynı k...
SLF4J: Sınıf yolu birden fazla SLF4J b...