最近发现了maven资源过滤,在文档中看到了一个注释:
标准目录布局
src/main/filters 资源过滤文件
我注意到 maven<filter>默认不搜索此目录中tag 中声明的文件。那么在这种情况下坚持使用 Maven Layout 有什么好处(当然结构一致性除外)?
这src/main/filters目录包含过滤器而不是要过滤的文件。Maven 无法自动搜索过滤器,因为它不知道要使用哪些过滤器。
请参阅Maven:完整参考:
\n\n\nsrc/main/filters 中的default.properties。
\nRun Code Online (Sandbox Code Playgroud)\njdbc.url=jdbc:hsqldb:mem:mydb\njdbc.username=sa\njdbc.password=\n要使用此default.properties文件配置资源过滤,我们需要在project\xe2\x80\x99s POM中指定两件事:
\nfilters构建配置元素中的属性文件列表,以及向Maven表示资源目录的标志是要过滤的。默认的 Maven 行为是跳过过滤,仅将资源复制到输出目录;你\xe2\x80\x99需要显式配置资源过滤器,否则Maven将完全跳过该步骤。此默认设置可确保 Maven\xe2\x80\x99s 资源过滤功能不会\xe2\x80\x99s 突然出现并破坏任何${...}不\xe2\x80\x99 不希望其替换的过滤资源(替换属性)。
\nRun Code Online (Sandbox Code Playgroud)\n<build>\n <filters>\n <filter>src/main/filters/default.properties</filter>\n </filters>\n <resources>\n <resource>\n <directory>src/main/resources</directory>\n <filtering>true</filtering>\n </resource>\n </resources>\n</build>\n
基本上,您假设src/main/filters(或src/test/filters)中存在的文件本身是可过滤的。这种假设是不正确的。
src/main/filters文件夹的目的是包含 Maven 在过滤操作期间将使用的资源过滤器文件。
例如,假设您定义了以下属性:
<project>
...
<properties>
<my.property>foo</my.property>
</properties>
...
</project>
Run Code Online (Sandbox Code Playgroud)
现在假设您正在过滤某个文件夹:
...
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
...
Run Code Online (Sandbox Code Playgroud)
根据该定义,src/main/resources中包含${my.property} 的任何文件都将被foo替换。
现在想象一下,您不想每次添加新属性时都更改 POM。
然后是src/main/filters起作用的时候。您不是将属性放在 POM 中,而是在src/main/filters下创建一个包含属性的文件,并向 POM 添加过滤器:
<project>
...
<name>Some Project</name>
...
<build>
...
<filters>
<filter>my-filter.properties</filter>
</filters>
...
</build>
...
</project>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1399 次 |
| 最近记录: |