Yerleşik JAR dosyasında bulunan bir kaynağı yüklemeye çalışıyorum. Proje aslında aşağıdaki yapıya sahip bir EAR dosyasını kullanarak JBoss dağıtıldığında: main.java
itibarenYerleşik JAR dosyasından kaynak yükleme
deploy.ear
|
|-> project.sar
|
|-> sub_project.jar
| |
| |-> settings.xml
|
|-> com/path/project/
|
|-> main.class
Ben InputStream
settings.xml
için almak istiyorum. Bunu yapmanın doğru yolu nedir?
Benim şimdiki anlayış Aşağıdaki kod çalışması gerekir, ancak null
dönen olduğunu: Bazı deneme yanılma sonra
this.getClass().getResourceAsStream("settings.xml");
Güncelleme
, aşağıdaki ifadeler çalışır:
getClass().getResourceAsStream("/settings.xml");
getClass().getResourceAsStream("/sub_project.jar/settings.xml");
getClass().getClassLoader().getResourceAsStream("/settings.xml");
getClass().getClassLoader().getResourceAsStream("settings.xml");
getClass().getClassLoader().getResourceAsStream("sub_project.jar/settings.xml");
getClass().getClassLoader().getResourceAsStream("/sub_project.jar/settings.xml");
java sınıf yükleyici kullanarak söz konusu kaynağın alabilirsiniz kendi ClassLoader gelen,
Ancak o zaman iç kavanozu yüklemek için iş. Bir kavanoz çözümü bu problemi çözüyor, bkz. Eran'ın cevabı. – MeBigFatGuy
/sub_project.jar/settings.xml dosyasının standart bir işaret olduğundan emin değilsiniz. JBoss uzantısı olabilir. –
"/settings.xml" çalışırken "settings.xml" nin neden başarısız olduğunu şaşırdım, ancak sonra şu belgeleri okudum: * Kaynak adı "/" ile başlıyorsa, değişmez; aksi halde, paket adı, "." dönüştürüldükten sonra kaynak adına eklenir. "/".* Class.class bunu yapar, ancak ClassLoader.class yapmaz. Bugün yeni bir şey öğrendim ... –