插件版本:
<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文件!!!!即如下錯誤: