4

我目前正在使用 maven 3.1.1 和 maven war 插件 2.4 ( http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html ) 建立一个 Web 项目。特别是,我正在尝试使用 maven war 插件以我过去已经做过的方式复制和过滤资源并且它有效。下面是相关的pom配置:

WAR插件配置

...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        ...
        <webResources>
            <resource>
                <directory>src/main/webapp/META-INF</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
                <targetPath>META-INF</targetPath>
            </resource>
            ...
    </configuration>
</plugin>
...

激活的配置文件定义:

...
<profiles>
<profile>
    <id>dummyDev</id>
    <build>
        <filters>
            <filter>filters/development.properties</filter>
        </filters>
    </build>
</profile>
...

META-INF/context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="${tomcat.context.reloadable}">
</Context>

最后是“development.properties”:

tomcat.context.reloadable=true

context.xml 被复制到 WAR 中,但没有被过滤。如果我尝试直接在配置文件中写入属性,它可以工作(即不引用属性文件):只有当我引用属性文件时它才有效。读取属性文件似乎有问题。此外,在“打包”之后,maven 不会在控制台中告诉我找不到属性文件(所以 maven 找到了文件)。

最后,我尝试使用 maven war 插件 2.1.1 版(和 2.3 版)来完成这项工作,并且它可以工作:我尝试了更多次,只是更改了 maven war 插件的版本,所以我很确定问题就是这样。

我错过了什么吗?这是 Maven 战争插件的已知错误吗?我是否试图以正确的方式获得结果(过滤该文件)?谢谢。

4

1 回答 1

9

好吧,我搜索了 maven war 插件 jira,发现这实际上是一个错误,在 2.4 版中引入(更多信息见http://jira.codehaus.org/browse/MWAR-301)。

为方便起见,我引用了 jira 问题中指出的解决方法:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        ...
        <filters>
            <filter>${project.basedir}/src/main/filters/my-filter.properties</filter>
        </filters>
    </configuration>
</plugin>

在我的皮肤上试了一下,效果很好。

无论如何,我注意到如果你在这个位置指定一个属性源文件(这是 pom 级别的战争插件声明,而不是配置文件级别),这将始终被读取,即对于你指定的每个构建配置文件。除非您为每个构建配置文件重新声明战争插件并在每个配置文件中指定一组不同的属性文件(一个非常糟糕的解决方案,在这里指出只是为了说这是错误的方式并且为了完整起见,显然恕我直言),此解决方案仅限于无论指定什么构建配置文件都必须始终读取给定属性文件的情况。

于 2013-11-05T11:39:29.380 回答