当前位置: 首页 > 知识库问答 >
问题:

Maven war插件未按预期进行筛选

徐嘉勋
2023-03-14

我目前正在用maven 3.1.1和maven war插件2.4建立一个web项目(http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html). 特别是,我正在尝试用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/上下文。xml:

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

最后是“development.properties”:

tomcat.context.reloadable=true

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

最后,我试着用maven war插件2.1.1版(和2.3版)实现了这项工作,而且效果很好:我尝试了更多次,只是更改了maven war插件的版本,所以我很确定问题在于此。

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

共有1个答案

柴耀
2023-03-14

好吧,我搜索了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级别的war插件声明,而不是概要文件级别),它将始终被读取,即对于您指定的每个构建概要文件。除非您为每个构建概要文件重新声明war插件,并在每个概要文件中指定一组不同的属性文件(这里指出的是一个非常糟糕的解决方案,只是为了说明这是错误的,而且为了完整性,显然是IMHO),否则此解决方案仅限于无论指定了什么构建概要文件,都必须始终读取给定属性文件的情况。

 类似资料:
  • 我尝试DateTimeFormatter将输入日期解析为。我使用了下面的代码 无法解析日期 闰年也是失败的。

  • 工具:Win7、Launch4J3.5、简单的Hello world Java控制台应用程序(绑定在JAR文件中) 大家好, 我有一个基本的JAVA控制台应用程序,它不请求任何输入,只是一个打开控制台窗口并显示Hello World文本的简单应用程序。 包装程序清单:C:\launch4j\manifest\uac.exe.manifest(也尝试保留此空白) 其余的都是默认的。

  • 例如,当我进入登录页面时...sessionCreated-将一个会话添加到计数器:1 然后,当我点击log out按钮时,会话计数减少了1(这很好),但紧接着会话计数增加了1(不是预期的)。 例如,当我按下注销按钮时...sessionDestroyed-从计数器0中扣除一个会话sessionCreated-将一个会话添加到计数器1中 我再次需要帮助来理解请。 这是我的Spring安全设置...

  • 我正在尝试用Java编写一个进程,该进程并发执行一系列任务,等待任务完成,然后将整个进程标记为完成。每个任务都有自己的信息,包括单个任务何时完成。我将使用ExecutorService作为流程,并将流程的本质归纳如下: 每个MyRunnable对象都有一个run方法,该方法进行webservice调用,然后将调用的结果写入数据库,包括调用完成的时间。ComplethisProcess方法只是将整个

  • 我正在尝试编写一个函数,如果< code > selection _ Match = = ' No Match ' then < code > DNB = score _ difference 0.02 然而,我返回相同的df,没有任何修改 虽然它应该回来 Lorem ipsum dolor sit amet,consecetur adipiscing elit,sed do eiusmod te

  • 我在本地安装了java11,我正在使用maven编译器插件将其源/目标设置为1.8,在我的代码中我正在使用