我有两个WARS:
base-overlay在src/main/webapp/WEB-INF/spring/*.xml
中包含XML配置文件。在那些XML配置文件中,我有一些参数需要在构建example-app WAR时进行过滤,这取决于base-overlay是否为其覆盖。例如,base-overlay/src/main/webapp/WEB-INF/spring/app-context.xml
中包含${data.url}
。打包示例应用程序WAR时,我已将POM属性<data.url>http://example.com:1234</data.url>
设置为替换base-overlay的${data.url}
。
当我配置maven-war-plugin来过滤这个文件时,我不得不给它一个target/war/work/com.example/base-overlay/WEB-INF/spring
目录,只是为了找到要过滤的app-config.xml
文件,然后再添加到新打包的例子中-app WAR。这似乎是一个黑客攻击,并且在使用Jetty进行测试时也不起作用,因为不会创建和过滤WAR。
此外,POM的<build/>
元素有一个<resources/>
元素,但我无法让它工作。
如何在编译时过滤覆盖资源?
答案 0 :(得分:0)
要解决此问题,我将所有XML资源(Spring)移动到相应的Maven资源目录${basedir}\src\main\resources\
,然后将其添加到<build/>
元素中的POM,如:
<resources>
<resource>
<directory>${basedir}/src/main/resources/</directory>
<filtering>true</filtering>
</resource>
</resources>
我在基础覆盖WAR中包含了不需要过滤的常见XML资源。在每个使用基础覆盖WAR的应用程序中,我添加了一个名为filtered-resources.xml
的XML文件,每次由Jetty打包和汇编应用程序WAR时都会对其进行过滤。