2013-07-22 2 views
4

Я пытаюсь загрузить ресурс, отличный от Java, из определенного файла WAR. Это, как я пытаюсь достичь этого:Загрузить ресурс, отличный от Java, от WAR

SomeClassInMyWarFile.class.getClassLoader().getResource("path/file.txt"); 

отлично работает при запуске в JBoss 4 - где getClassLoader() возвращает экземпляр WebAppClassLoader.

Но когда я пытаюсь запустить этот код под JBoss 6, я получаю экземпляр BaseClassLoader, который в свою очередь не может найти ресурс внутри этой WAR.

Для целей отладки, когда я называю getResource ("./") на обоих, эти результаты:

  • JBoss 4

    "file:/C:/path/to/my/WarFile.war/" 
    
  • JBoss 6

    "file:/C:/jboss6/bin/a1k2347-kpm5pr-hjfoi81u-1-hjfoj582-dz/" 
    

    "/ a1k2347-kpm5pr-hjfoi81u-1-hjfoj582-dz /" даже не существует.

У меня есть ощущение, что я не ставил мой jboss6 правильно, или что я пропускаю еще один важный вещь здесь .. Любые идеи, что могло случиться? Или, может быть, даже тот, кто может объяснить, что я делаю неправильно?

ответ

4

Хорошо, мне кажется, что мне не хватает элементарного понимания того, как должны работать файлы WAR.

После того как я понял, что только WEB-INF/classes и WEB-INF/lib добавляются в путь к классам ClassLoader, и НЕ корневой каталог файла WAR, решение проблемы было довольно просто:

Как быстро исправить, я изменил path/file.txt до ../../path/file.txt, поэтому путь к ресурсу относительно WEB-INF/classes

Это некрасиво. Когда-нибудь, я потрачу некоторое время на совершенствование нашей процедуры сборки, поэтому ресурсы автоматически перейдут в каталог, находящийся в пути к классам.

Смежные вопросы