• maven filter插件只替换了部分变量问题


    maven filter简介

    maven的resources插件,有一个filter的作用,能够在打包的时候,从特定文件里读取key-value对,替换配置文件中的占位符变量。很多线上线下有不同环境的应用,都是用这种方式来打包,只需要在文件中配置不同的值即可。

    下面就是一个最简单的配置: 

     <build>
            <finalName>Test</finalName>
            <filters>
                <filter>src/main/filters/${conf-dir}.properties</filter>
            </filters>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
    </build>

    上面的配置,会读取src/main/filters/${conf-dir}.properties文件里的k-v对,然后将src/main/resources下的文件中,${var_name}形式的变量都替换成${conf-dir}.properties里对应key的值。注意:不会替换src/main/java下的文件里的${var_name}!

    当然,如果你的resources不仅仅是xml配置文件,你可能还希望加上<includes></includes>或者<excludes></excludes>配置段来限制替换的文件类型。

    maven filter踩到的坑

    今天在打包项目的时候,发现有一个xml文件,被替换了一半变量值,非常奇怪。

    万水千山,终于找到原因:maven 3.0的resources plugin对配置文件中有”@“符号的情况有bug,会导致变量无法被替换。

    举例:

    以下方式打包不会替换${smtpProtocol}和${smtpHost}

    以下方式打包会替换${smtpProtocol}和${smtpHost} 

    结论

    不要在被替换行里包括有@符号!

    技巧

    最后,排查中还有一个小技巧,不要用mvn install或者mvn package这种操作来重新运行,因为会很慢很耗时,直接用mvn clean resources:resources就可以了,它只复制&替换配置目录下的文件,非常地快。

    参考资料

    http://blog.csdn.net/inte_sleeper/article/details/10128041

  • 相关阅读:
    Yougth的最大化(好题,二分查找 0 1分数规划)
    Cable master(好题,二分)
    Can you find it?(二分 二分+STL set map)
    Can you solve this equation?(二分)
    Bridging signals(二分 二分+stl dp)
    A Bug's Life
    Is It A Tree?(并查集)
    简单计算器(栈)
    Linux学习之常用压缩命令(三)
    Linux系统之常用文件搜索命令
  • 原文地址:https://www.cnblogs.com/junzi2099/p/8036524.html
Copyright © 2020-2023  润新知