maven-resources-plugin插件关于占位符不生效问题

插件版本:

<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文件!!!!即如下错误:

原文地址:https://www.cnblogs.com/leodaxin/p/9882536.html