我有一个需要解析属性占位符的 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 (或 maven jetty:run 的 target/classes )结束。
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 插件 <webReources> 并启用过滤。这将在打包 WAR 时将其内容复制到适当的位置,但不会使其可用于 jetty:run
- 其他一些我什至不记得的黑客...(如果我这样做会更新)
总之,maven-jetty-plugin 需要文件位于 src/main/resources/webapp/ 下插入路径和文件名,以便可用于 maven jetty:run 命令...
谢谢你的帮助...
此致 劳埃德力量