Если у меня есть набор файлов ресурсов в каталоге на моем пути к классу, я могу перечислить их использование ClassLoader.getResources(location)
.
Например, если я имею /mydir/myresource.properties
на пути к классу я могу назвать classloader's getResources("mydir")
и получите перечисление URL, содержащих myresource.properties
.
Когда я собираю те же самые ресурсы в .jar, я ничего не получаю в перечислении URL, когда я выполняю вызов. Я только заменил структуру папок банкой, содержащей те папки (это - веб-приложение, таким образом, банка входит /WEB-INF/lib
). Я также получил много других использований вызовов getResourceAsStream(location)
для получения других ресурсов индивидуально по имени и они все хорошо работают.
Что является особенным в перечислении ресурсов, когда ресурсы находятся в .jar?
Обновление - я воспроизвел (выход) поведение вне контейнера. Следующий отрывок приводит к dirProperties
ключи установки объекта к ресурсу называют в пакете, но если пакет находится в бросках .jar NullPointerException во время метода Properties.load(InputStream).
Properties dirProperties = new Properties();
dirProperties.load(this.getClass().getClassLoader().getResourceAsStream(location));
Тот же код контейнера (Tomcat 5.5) не выдает исключения, но производит пустой объект Свойств, когда файлы находятся в .jar.
this.getClass ().getClassLoader ().getResourceAsStream(location);