Как я могу найти ресурс не-Java в WAR во время выполнения? - PullRequest
3 голосов
/ 02 ноября 2011

Мне нужно запустить сценарий оболочки во время выполнения из WAR, который я запускаю на Tomcat.

Таким образом, я поместил свой скрипт theScript.sh в мой каталог src / main / resources (потому что да, я использую Maven). Этот каталог находится в пути к классам, я его проверил.

В коде я хочу скопировать мой скрипт во временную директорию. Поэтому я попытался получить его через ClassLoader:

URL myURL = ClassLoader.getSystemResource("theScript.sh");
if (myURL == null) {
    LOG.error("Couldn't find the resource");
}

И угадайте что? Да, «Не удалось найти ресурс» постоянно появляется в моих журналах.

Есть идеи, что я здесь не так делаю?

Моя среда - это традиционная вещь Eclipse / Tomcat.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

Вы не хотите использовать системный cloassloader - который обычно находит ресурсы, являющиеся частью Tomcat или JRE.

Вы хотите загрузить ресурс из загрузчика классов, который использовался для загрузки вашегоФайл WAR.Есть несколько способов сделать это, но официальный способ будет получить доступ к ServletContext ( javadoc ) и вызвать либо getResource, либо getClassLoader().getResource на этом.

Если у вас нет ServletContext, то вы можете "обмануть", используя загрузчик классов для класса, который, как вы знаете, взят из вашего файла WAR.Что-то вроде

this.getClass().getClassLoader().getResource("xyz");

, где this - это ваш класс, который был развернут в вашем файле WAR.

0 голосов
/ 02 ноября 2011

вы пробовали getClass (). GetClassLoader (). GetResource () или getResourceAsStream () - если он находится в пути к классам, они должны получить его.

...