【发布时间】:2011-11-20 12:10:44
【问题描述】:
我有一个需要解析属性占位符的 XML 文件 (urlrewrite.xml)。我启用 Maven 过滤来实现这一点。这适用于组装好的 WAR 文件。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
问题是当尝试使用 maven-jetty-plugin(Maven Jetty 插件)在开发模式下运行应用程序时,如 maven jetty:run。
有问题的文件 urlrewrite.xml 位于 src/main/resources 目录中,因此应该(并且确实)以 /WEB-INF/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 专家才能找到解决方法(提示:这是一个挑战!)。
有人知道解决这个问题的方法吗?我还尝试了以下解决方法来了解是否有效:
- 将 urlrewrite.xml 放在新目录 src/main/webResources 下,并将其添加到 maven war 插件
并启用过滤。这将在打包 WAR 时将其内容复制到适当的位置,但不会使其可用于 jetty:run - 其他一些我什至不记得的 hack ...(如果我记得会更新)
总而言之,maven-jetty-plugin 需要该文件位于 src/main/resources/webapp/插入路径和文件名 下才能用于 maven jetty:run 命令。 .
感谢您的帮助...
真诚地, 劳埃德军
【问题讨论】:
标签: maven jetty filtering maven-jetty-plugin