Maven资源过滤无法在“资源”文件夹

时间:2015-07-22 18:03:57

标签: java maven

我在使用Maven的资源过滤方面遇到了一些麻烦。目录结构是:

src
 |-main
    |-filters
    |-java
    |-resources
    |-webapp

POM包含以下内容:

<build>
    <filters>
        <filter>src/main/filters/${environment}/filter.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
                <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
                <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
    </plugin>

    ...

</build>

我在NetBeans中使用'保存时复制静态资源',但只有在filtering设置为false时才会复制资源。每次我更改resources文件夹中的文件而不是仅保存更改的文件时,这都迫使我进行构建。

运行mvn resources:resources会得到以下输出:

[INFO] Scanning for projects...
[INFO]
[INFO]     ------------------------------------------------------------------------
[INFO] Building core 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 77 resources
[INFO] Copying 31 resources
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.618 s
[INFO] Finished at: 2015-07-22T21:24:32+01:00
[INFO] Final Memory: 9M/155M
[INFO] ------------------------------------------------------------------------

但是当我查看目标文件夹时,未更新修改后的struts.xml文件。我之前从未使用mvn resources:resources所以也许我对它有错误的想法。它不应该将文件从src/main/resources复制到target/[FOLDER]/WEB-INF/classes吗?

有没有人有解决方案?

2 个答案:

答案 0 :(得分:3)

  

不应该将文件从src / main / resources复制到target / [FOLDER] / WEB-INF / classes

不,它应该将这些文件复制到target/classes。 maven-war-plugin负责将此文件夹的内容复制到WEB-INF/classes(在打包阶段)。因此,请运行mvn package

答案 1 :(得分:1)

感谢您的评论。使用命令行时,一切都按预期工作。问题出在NetBeans上。我发现bug report(从2012年开始)说明IDE在某些情况下无法使用过滤后的资源,并在文件夹上放置了一个徽章来表示。

为了解决这个问题,我有:

  • 打开项目属性;
  • 点击Action;
  • 点击Add custom并将其命名为mvn:resources;
  • execute goals我输入了resources:resources package;
  • 现在我可以右键单击该项目并选择custom&gt; mvn:resources以将修改复制到package目录。

JRebel现在接受了这些变化,所以我很高兴。