插件版本:
<plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> <configuration> <!-- 覆盖原有文件 --> <!--<overwrite>true</overwrite>--> <!--<outputDirectory>${project.build.outputDirectory}</outputDirectory>--> <filters> <!--<filter>src/main/resources/${env}/application.yml</filter>--> <filter>src/main/resources/${env}/app.properties</filter> </filters> <resources> <resource> <!-- 指定resources插件处理哪个目录下的资源文件 --> <directory>src/main/resources/</directory> <filtering>true</filtering> <includes> <include>**/*</include> </includes> </resource> </resources> </configuration> </plugin>
项目资源结构:
使用maven profile 传入值将application.yml的变量值填充到spring下面xml中的占位符,实际发现无论怎么样都不生效!!!!
最后怀疑是该插件不支持yml填充的原因,结果修改为:
在传入变量值发现一切OK!
maven debug插件方案参见:https://medium.com/@prabushi/debug-maven-plugin-while-the-application-is-executed-b602ea2803f8
具体做法就是使用:mvnDebug命令,例如传入一个Profile的命令式:mvnDebug package -P prod ;然后需要使用remote debug进行连接!!!
源码分析:
org.apache.maven.shared.filtering.BaseFilter#createInterpolator 加载解析配置占位符的文件,通常就是properties文件。
org.apache.maven.shared.filtering.BaseFilter#getDefaultFilterWrappers(org.apache.maven.shared.filtering.AbstractMavenFilteringRequest)加载配置文件
最终其实使用的是org.apache.maven.shared.filtering.BaseFilter#loadProperties方法加载配置到Proerties对象中!!!
结论就是:maven-resources-plug不支持yml作为占位符值的配置文件!!!就是不不支持yml格式文件,必须使用properties文件!!!!即如下错误: