我有一個需要解決屬性佔位符的XML文件(urlrewrite.xml)。我啓用Maven過濾來實現這一點。這適用於組裝的WAR文件。如何在使用maven jetty插件時過濾資源?
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
的問題是試圖運行使用Maven的碼頭 - 插件(Maven的碼頭插件)的發展模式中的應用,隨着Maven碼頭時:運行。
有問題的文件urlrewrite.xml位於src/main/resources目錄下,因此應該(並且)應該在/ WEB-INF/classes(或者maven jetty的target/classes:run )。
的URLRewriteFilter config指定配置文件的位置如下:
<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中提取資源。
如果這對你來說很模糊,那麼你可能無法回答這個問題,因爲我懷疑你需要成爲一名碼頭專家來找出解決方法(提示:這是一個挑戰!)。
有沒有人知道解決這個問題的方法?我也曾嘗試以下解決知道無濟於事:
- 一個新的目錄下,認沽urlrewrite.xml,的src/main/webResources並將其添加到Maven的戰爭插件<webReources>和啓用過濾。當WAR被打包時,它會將它的內容複製到適當的位置,但不會使其可用於碼頭:運行
- 其他一些我甚至不記得的黑客...(將更新,如果我這樣做)
綜上所述,Maven的碼頭 - 插件需要的文件是在src /主/資源/ web應用/ 插入路徑和文件名以可用於maven的碼頭:運行命令
謝謝你的幫助...
此致 Lloyd F orce
+1用於記錄解決方案(網上有很多未解答的問題)。如果這對你有用,請自我接受。簡而言之,你是否嘗試過使用專門的資源過濾來添加'Development'maven profile?這是我爲非碼頭Web項目採取的一種方法。 –
可以選擇使用maven-replacer-plugin,並將替換後的文件寫入/ WEB-INF/classes/dir。它將確保dir結構存在。 – Steven
對於那些使用Jetty 9:org.eclipse.jetty.util.resource.ResourceCollection而不是org.mortbay.resource.ResourceCollection – RockMeetHardplace