本文記錄了一次文件編碼差別引發的profile替換佔位符失敗的bug,及處理思路。記錄成文,以便之後反思,或讓後來遇到問題的同窗能有據可循。maven
原由及bug描述
相信你們對於Maven中打包不一樣環境使用不一樣profile文件的作法已經很熟悉了。我所在的項目分了好多個profile,每一個profile對應不一樣的properties,以下圖:
工具
在開發的過程當中,出現其中某幾個properties編譯打包出來的工程,佔位符沒有被替換,可是其餘的properties則沒有問題。war包中的配置文件中仍是會有${xxx.xxx.xxx}的字符。
學習
處理思路
- 首先排除了編碼失誤,字符寫錯等等初級錯誤
- 而後我懷疑是maven-resources-plugin插件在filter的過程當中出現字符的問題,這個想法是因爲在Maven的resource打包過程當中,觸發resources的filter操做的插件就是maven-resources-plugin,因此出問題必定是在這個插件的工做過程當中,查看Maven的package過程日誌,以下圖:
日誌提示使用UTF-8的編碼格式,拷貝了16個通過filter操做的resource文件。而後排除了properties文件中的中文干擾,可是依然沒有解決問題,Maven打包後依然是那幾個properties沒有有效的替換佔位符。測試
- 暫時沒有其餘解決思路,只能逐字逐字的對比能成功替換佔位符的properties和不能成功替換佔位符的properties。還用上了各類對比工具。結局依然是沒有發現什麼異常的地方。
- 肯定字符沒問題後,懷疑是文件自己的問題。複製正常和異常兩種properties文件,修更名字,修改properties裏面的內容信息。打包測試。測試的結果是,能正常替換佔位符的properties複製出來的都可以正常替換佔位符,反之不能正確替換佔位符的properties複製出來的都不能正常替換佔位符。因而可知,這兩個properties可能在存檔的時候就存在差別。從IDE裏複製異常的properties中的字符,到記事本里保存到本地,果真是存檔時的編碼有問題,而IDE沒有提示這個問題。
小結
在排除了大部分低級錯誤後,不要盲目進行沒有必要的盲目測試,投石問路雖然是不錯的方法,可是在排除bug時,一步一步的投石問路未免太過耗時。比方說在此次的bug解決中,在排除了大部分低級錯誤後,不該盲目進行測試,妄圖以此找到解決問題的辦法,而應該站在更高層次的角度來看待問題出現的原因。因此在之後的編碼學習過程當中,應該增強本身的邏輯思惟能力,提升分析解決問題的能力。編碼