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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM