maven默认filter目录的好处

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

标准目录布局
src / main / filters资源filter文件

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

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

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

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

  ...  foo  ...  

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

 ...  src/main/resources true  ... 

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

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

然后是src / main / filters开始运作的时候。 您可以使用属性在src / main / filters下创建一个文件,而不是将属性放在POM中,并在POM中添加一个filter:

  ... Some Project ...  ...  my-filter.properties  ...  ...  

主要的好处是,当有人去寻找filter时,他们会查看src/main/filters ,如果他们没有看到src/main/filters他们通常很快就会认为你没有任何filter。

正如其他人也提到的那样,你只将filter放在src/main/filters它不是你放置需要过滤的东西的地方。

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

见Maven:完整参考 :

src / main / filters中的default.properties。

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

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

过滤资源(替换属性)。

   src/main/filters/default.properties    src/main/resources true