最近我发现了maven资源过滤,并在文档中看到了一个注释:
标准目录布局
src / main / filters资源过滤器文件
我注意到默认情况下,maven不会搜索此目录中<filter>
标记中声明的文件。那么在这种情况下坚持使用Maven布局有什么好处(除了结构均匀性之外)?
答案 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
中,而不是放置需要过滤的内容的地方。