maven默认过滤器目录的好处

时间:2016-03-14 13:27:58

标签: java maven

最近我发现了maven资源过滤,并在文档中看到了一个注释:

  

标准目录布局
  src / main / filters资源过滤器文件

我注意到默认情况下,maven不会搜索此目录中<filter>标记中声明的文件。那么在这种情况下坚持使用Maven布局有什么好处(除了结构均匀性之外)?

3 个答案:

答案 0 :(得分:3)

基本上,您假设 src / main / filters (或 src / test / filters )中存在的文件本身是可过滤的。这个假设是不正确的。

src / main / filters 文件夹的目的是包含Maven在过滤操作期间将使用的资源过滤器文件。

例如,假设您定义了以下属性:

$(function() {
    var selectedItem;

    $('area').mouseover(function() {
        var imgid=$(this).data('imgid');
        $('#demo').text("Mouseover for "+imgid);
        $('#'+imgid)
            .toggleClass('invert',true)
            .css('z-index',2);
    }).mouseout(function() {
        var imgid=$(this).data('imgid');
        $('#mi').text("Mouseout for "+imgid);
        $('#'+imgid)
            .toggleClass('invert',false)
            .css('z-index',1);
    }).click(function() {

        if(selectedItem)
        {
            selectedItem
                .toggleClass('pressed')
                .css('z-index', 1);
            selectedItem = null;
        }

        var imgid=$(this).data('imgid');
        $('#demo').text("click for "+imgid);
        $('#'+imgid)
            .toggleClass('pressed')
            .css('z-index',2);

        selectedItem = $('#'+imgid);
    });
});

现在想象你正在过滤一些文件夹:

<project>
...
<properties>
    <my.property>foo</my.property>
</properties>
...
</project>

根据该定义, src / main / resources 中包含 $ {my.property} 的任何文件都将被 foo 替换。

现在想象一下,每次要添加新属性时都不想更改POM。

然后 src / main / filters 开始行动。您可以使用属性在 src / main / filters 下创建一个文件,而不是将属性放在POM中,并在POM中添加过滤器:

...
<resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
</resource>
...

答案 1 :(得分:2)

src/main/filters目录包含filters而不是要过滤的文件。 Maven无法自动搜索过滤器,因为它无法知道要使用哪些过滤器。

请参阅Maven: The Complete Reference

  

src / main / filters中的default.properties。

jdbc.url=jdbc:hsqldb:mem:mydb
jdbc.username=sa
jdbc.password=
     

要使用此 default.properties 文件配置资源过滤,我们需要在项目的POM中指定两项内容:构建配置的filters元素中的属性文件列表,以及要过滤资源目录的Maven标志。默认的Maven行为是跳过过滤,只是将资源复制到输出目录;您需要显式配置资源过滤器,否则Maven将完全跳过该步骤。此默认设置可确保Maven的资源过滤功能不会让您感到惊讶并破坏您不希望它替换的任何 $ {...} 引用。

     

过滤资源(替换属性)。

<build>
    <filters>
        <filter>src/main/filters/default.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

答案 2 :(得分:1)

主要的好处是,当有人去寻找过滤器时,他们会查看src/main/filters,如果他们没有看到src/main/filters,他们通常会很快认为您没有过滤器。< / p>

正如其他人也提到的那样,您只将过滤器放在src/main/filters中,而不是放置需要过滤的内容的地方。