filter动态参数 maven_使用Profile和Resources Filter隔离测试环境
Maven能夠幫我們很好的管理測試,我們可以在src/test/java
和 src/test/resources
下面使用JUnit或者TestNG 編寫單元測試和集成測試,然后在命令行運行 mvn test
,測試就會自動運行,同時產(chǎn)生詳細(xì)的測試報告。對只有一兩個人的項目來說,不會碰到本文將提到的問題。
我們考慮以下場景(這也是我在實際項目中碰到的問題):有一個大概30人團隊的項目,其中一半在美國,另一半在中國,要知道兩個地方的網(wǎng)絡(luò)連接速度不是很快,也就是說從地球的一端連接地球另一端的數(shù)據(jù)庫十分耗時。中國的團隊開發(fā)了一些模塊,也很積極的編寫了大量單元測試和集成測試(我這里說的單元測試使指不對外部任何環(huán)境有依賴),這些代碼完全由Maven管理,所以在中國團隊這里,持續(xù)集成服務(wù)器上只有簡單的一條 mvn clean install
命令,一切都很好!但是,當(dāng)美國團隊簽出同樣的源代碼,運行同樣的命令時,問題出現(xiàn)了,測試在他們那里總是過不去,經(jīng)過檢查,發(fā)現(xiàn)代碼中有太多的硬編碼的數(shù)據(jù)庫鏈接,以及其它的對外部環(huán)境的依賴。于是他們抱怨:How can you hardcode database link? 中國的同事很委屈:我們已經(jīng)從代碼里把這些東西抽取到配置文件里了,這不算Hardcode吧。大家暫時沒辦法,于是只能在build命令后加上-Dtest -DfailIfNoTests
,build可以過了,但是美國團隊心里總是不舒服,尤其是當(dāng)他們代碼把測試弄壞時,他們經(jīng)常不知道。
問題總是要解決的,更何況現(xiàn)在的問題也不小。讓我們看看Maven為我們提供了什么,大家首先會想到的肯定是Profile,通過Profile,我們可以通過Maven傳入一些個性化變量。考慮一下我們的情況下什么需要個性化?也就是說什么東西在不同的地方值是不一樣的?答案是src/test/resources
下的一些資源文件,如JPA用到的 persistence.xml
,其中包含了這樣的內(nèi)容:
我們看到這個資源文件綁定到了本機的mysql數(shù)據(jù)庫上,我們需要從Maven傳入這些參數(shù),包括url, username和password。可問題是,通過Profile傳輸?shù)膫€性化變量,我們能在pom.xml里面引用,我們?nèi)绾卧趕rc/test /resources
下的資源文件里引用它們呢?
先別急,先讓我們把Profile定義好,這里我選擇在%M2_HOME%/conf
下的settings.xml
里定義全局的Profile,因為數(shù)據(jù)庫鏈接是很多模塊的測試都會用到的,定義如下:
myProfile
jdbc:mysql://localhost:3306
test
test
test
myProfile
此外,修改資源文件如下:
至此,我們已經(jīng)把環(huán)境相關(guān)的變量隔離開了,每個用戶都有自己的settings.xml
文件,所以每個人都能配置自己的settings.xml
來使用他想要使用的數(shù)據(jù)庫。針對我們上面的場景,美國的團隊只要在本地配置一個數(shù)據(jù)庫,他們也就可以運行測試了,皆大歡喜!
最后,不要忘了配置 Maven Resources 插件讓它開啟 filtering 功能:
[...]
src/test/resources
true
[...]
至此,運行 mvn install
,Maven 會讓 Resources 插件首先根據(jù) setttings.xml
文件中的值填充測試資源文件中的變量,然后再運行測試。這種解決方案不僅僅適用于數(shù)據(jù)庫,任何外部環(huán)境配置都可以使用該方案,如對消息服務(wù)器的依賴。盡情享受Maven給你帶來的便利吧!
分享到:
2008-06-22 12:46
瀏覽 10483
評論
謝謝分享!
5 樓
axlfu
2010-08-05
hi,我用filter做配置替換,設(shè)置了filter的文件,編碼采用GB18030,但替換后的文件有些亂碼(大部分是正確的),導(dǎo)致應(yīng)用無法啟動
源文件:
替換后:
請教下該如何解決?
4 樓
juvenshun
2008-11-03
imcaptor 寫道
我的問題,settings里面大小寫有問題。<activeProfiles>??? <activeProfile>development</activeProfile>??? <activeprofile>sqlProfile</activeprofile>? </activeProfiles>應(yīng)該是:<activeProfiles>??? <activeProfile>development</activeProfile>??? <activeProfile>sqlProfile</activeProfile>? </activeProfiles>我用mvn help:active-profiles看了一下有效的profile。
sorry, 大小寫問題已修復(fù)
3 樓
imcaptor
2008-11-02
我的問題,settings里面大小寫有問題。
development
sqlProfile
應(yīng)該是:
development
sqlProfile
我用mvn help:active-profiles看了一下有效的profile。
2 樓
imcaptor
2008-11-02
我試了,好像不管用啊,settings.xml設(shè)置了,但是沒有起作用。
1 樓
lovefly_zero
2008-08-05
很好的東西 收藏了
總結(jié)
以上是生活随笔為你收集整理的filter动态参数 maven_使用Profile和Resources Filter隔离测试环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请结合计算机硬件论述指令执行的过程,【计
- 下一篇: java 高并发mqtt服务器_Boom