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