在使用Maven构建WAR时,如何过滤重叠的WAR资源?

时间:2011-03-24 17:50:33

标签: resources filter maven overlay pom.xml

我有两个WARS:

  1. 基覆盖
  2. 示例应用内
  3. 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/>元素,但我无法让它工作。

    如何在编译时过滤覆盖资源?

1 个答案:

答案 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时都会对其进行过滤。