Как фильтровать ресурсы при использовании плагина maven jetty?

У меня есть XML-файл (urlrewrite.xml), для которого нужно разрешить заполнитель свойств. Для этого я включаю фильтрацию Maven. Это отлично работает для собранного файла WAR.

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>

Проблема заключается в попытке запустить приложение в режиме разработки с использованием maven-jetty-plugin (Maven Jetty Plugin) в качестве maven jetty: run.

Рассматриваемый файл urlrewrite.xml находится в каталоге src / main / resources и, следовательно, должен (и делает) заканчиваться в / WEB-INF / classes (или target / classes для maven jetty: run) .

Конфигурация URLRewriteFilter определяет расположение файла конфигурации следующим образом:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <init-param>
        <param-name>confPath</param-name>
        <param-value>/WEB-INF/classes/urlrewrite.xml</param-value>
    </init-param>
</filter>

Это будет работать во время развертывания.Однако при использовании плагина jetty maven URLRewrite умрет с исключением NullPointerException, поскольку он использует context.getResourceAsString ("/ WEB-INF / classes / urlrewrite.xml") для загрузки файла конфигурации. Jetty возвращает null для этого, потому что при запуске приложения из рабочей области оно разрешает / WEB-INF / classes / ... в src / main / webapp / WEB-INF / .... Файл там не существует, потому что WAR еще не собран. Вместо этого он должен извлечь ресурс из target / classes / urlrewrite.xml.

Если вам это не понятно, то вы, вероятно, не сможете ответить на этот вопрос, потому что я подозреваю, что вам нужно быть гуру Jetty, чтобы найти обходной путь (подсказка: это проблема!).

Кто-нибудь знает способ обойти это? Я также пробовал следующие обходные пути, чтобы узнать о avail:

  1. Поместите urlrewrite.xml в новый каталог src / main / webResources и добавьте его в плагин maven war и включите фильтрацию. Это скопирует его содержимое в соответствующее место, когда WAR будет упаковано, но не сделает его доступным для пристани: run
  2. Некоторые другие хаки, которые я даже не могу вспомнить ... (обновятся, если я это сделаю)

Таким образом, maven-jetty-plugin должен находиться в папке src / main / resources / webapp / , вставить путь и имя файла , чтобы он был доступен для maven jetty: команда запуска ...

Спасибо за помощь ...

С уважением, Ллойд Форс

8
задан zmf 25 February 2013 в 16:33
поделиться