les*_*es2 8 filtering jetty maven maven-jetty-plugin
我有一个需要解析属性占位符的XML文件(urlrewrite.xml).我启用了Maven过滤来实现这一目标.这适用于组装的WAR文件.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
Run Code Online (Sandbox Code Playgroud)
问题是尝试使用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>
Run Code Online (Sandbox Code Playgroud)
这将在部署时工作.但是,使用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大师来找出一个解决方法(提示:这是一个挑战!).
有没有人知道这方面的方法?我也尝试过以下变通方法:
总之,maven-jetty-plugin需要将文件置于src/main/resources/webapp/insert路径和文件名下,以便可用于maven jetty:run命令...
谢谢你的帮助......
真诚的,劳埃德力
les*_*es2 12
回答了我自己的问题.
将maven-jetty-plugin升级到至少6.1.12
请参阅"配置多个WebApp源目录"上的此Wiki页面(自jetty-6.1.12.rc2和jetty-7.0.0pre3以来可用)
为pom.xml添加一些魔法:
首先,为过滤的Web资源添加一个新目录(src/main/webResources)并添加一个<resource>元素:
<resource>
<directory>src/main/webResources</directory>
<filtering>true</filtering>
<targetPath>../jettyFilteredResources</targetPath>
</resource>
Run Code Online (Sandbox Code Playgroud)
这会将文件复制到target/jettyFilteredResources(我们稍后会引用它).此目录不会被复制到打包的WAR文件中,只能用于jetty!
将以下元素添加到maven-war-plugin <configuration>元素:
<webResources>
<resource>
<directory>src/main/webResources</directory>
<filtering>true</filtering>
</resource>
</webResources>
Run Code Online (Sandbox Code Playgroud)
这将确保为您的真实WAR文件打包所有内容.
最后,通过将以下代码段添加到<baseResource>元素,告诉jetty使用您特别为其复制的资源:
<baseResource implementation="org.mortbay.resource.ResourceCollection">
<resourcesAsCSV>src/main/webapp,target/jettyFilteredResources</resourcesAsCSV>
</baseResource>
Run Code Online (Sandbox Code Playgroud)
现在一切都会好起来的!(好吧,从技术上讲,我还没有测试过生产WAR,但是......等等......它应该也可以工作).
如果有人有更好的答案,我会接受它,只要在合理的时间内(比如说1天)提供答案.