(點選上方公眾號,可快速關註)
來源:袁鳴凱 ,
blog.csdn.net/lifetragedy/article/details/8198867
一、前言
我們在《萬能框架spring》前四天中都用到了maven,接下去要講述在SSX這樣的架構下我們的“單元測試”是怎麼進行的,但是在此之前我們再來深入入解一下maven,因為我們的單元測試需要用到的是junit+ant+junitreport這樣的組合。而。。。。。。由於我們已經使用了maven,那麼我們如何可以延續經典的junit+ant這樣的單元測試的組合呢?其答案就是把maven和ant再進行組合一下。
二、用Maven任務在Ant中使用Maven依賴
Maven的一個重要特性是使用中央倉庫,儲存依賴和識別應用程式所需的庫。Maven2還支援傳遞依賴(transitivedependency),這是一個強大的概念,它將使用者需要宣告的依賴限制到最小程度。Ant不支援“即開即用”的依賴管理。在Ant專案中,應用程式所需的全部程式庫通常都存放在一個專案目錄中。
三、使用maven-ant-task
3.1安裝maven-ant-task
我們先下載maven-ant-tasks-2.1.3.jar(我也已經上傳到了“我的資源”裡了);
下載完後把它放到我們的ant的lib目錄下;
3.2 打包工程
這是一個傳統的沒有使用maven依賴庫的ant的打包流程,從圖上看很清晰,對吧?
在前面說了,ant打包時是需要所有的.jar檔案都是事先已經在工程的WebContent/WEB-INF/lib目錄下了,這也是大都數人所熟悉的。
但是Maven打包,就一個包依賴宣告檔案pom.xml,然後在打包時缺什麼jarMaven會自動幫我們去下載,所以說Maven真是一個好東西,使用maven-ant-task我們可以把“宣告classpath”這塊來用maven-ant-task來做,即其它還是使用ant,就是在宣告編譯時即javac時需要用到的那些依賴包時再使用maven的特性。
因此,我們再來看上述這個純ant工程打包流程在引入了maven-ant-task後會變成什麼樣子吧。
四、動手改造工程
我們此處以myssh2的工程來做例子,原來的pom.xml檔案不動,增加ant的打包檔案即build.xml檔案。
4.1maven環境的重設定
我們前面的幾天教程用的都是一個叫maveneclipse(m2 eclipse)的外掛
它預設會把所有的maven依賴庫下載到你的C:\Users\yourusername\.m2\repository這個目錄下(以win7為例,如果你用的是XP那麼這個目錄應該在你的c:\documents and settings目錄下),因此我們需要手動把我們的maven安裝目錄的下的conf\目錄下的settings.xml檔案也複製到
C:\Users\yourusername\.m2\repository目錄下,還記得嗎?
現在,我們在我們的apache-maven的安裝目錄即c:\maven目錄下建立我們的repository,並且讓m2eclipse外掛也將repository指向C:\maven\repository。
更改c:\maven\conf\settings.xml檔案
我們在原有的settings.xml檔案中增加瞭如下的一段話
C:\maven\repository
然後回到eclipse點開window->preference->Maven->UserSettings,將我們的m2eclipse的設定配置成如下的樣子
註意:
Local Repository再也不是“C:\Users\yourusername\.m2\repository”了,而是指向了我們的
c:\maven\repository目錄了。
這樣做還有一個好處就是你在重新裝機時你的maven的local repository不會因為documents and settings目錄的丟失而丟失了。
4.2編寫build.xml
build.properties檔案
# ant
appName=myssh2
webAppName=myssh2
webAppQAName=myssh2-UT
local.dir=C:/eclipsespace/${appName}
src.dir=${local.dir}/src/main/java
dist.dir=${local.dir}/dist
webroot.dir=${local.dir}/src/main/webapp
lib.dir=${local.dir}/lib
classes.dir=${webroot.dir}/WEB-INF/classes
resources.dir=${local.dir}/src/main/resources
請註意此處的${}這樣的placeholder(替換符)的使用技巧
build.xml檔案(紅色加粗部分)
classpathref=”maven-ant-tasks.classpath” />
includeAntRuntime=”false” srcdir=”${src.dir}”>
對照著Maven+Ant打包的流程圖看這個build.xml檔案,一點也不難看懂,就一個過程化的批處理指令碼而己。
關鍵在於:
classpathref=”maven-ant-tasks.classpath” />
此處宣告了:
1) 我們在ant的build.xml檔案中使用maven外掛
2) 我們的工程所用到的依賴庫即所有的.jar檔案在工程(myssh2)原有工程的pom.xml檔案中已經宣告過依賴關係了,build.xml檔案只要使用它就可以了。
3) 我們的ant在使用javac進行編譯時所需的庫在${lib.dir},見build.properties即在c:\eclipsespace\myssh2\lib目錄內。
4) c:\eclipsespace\myssh2\lib目錄內所有的jar則是透過“download-libs”這個target得來的。
下麵是build.xml檔案被執行後的輸出效果即在eclipse中開啟build.xml檔案後右鍵選RunAs->Ant Build的輸出:
去我們的工程的dist目錄下檢視,就可以看到一個myssh2.war工程
把這個工程直接扔到tomcat的webapp目錄下,執行tomcat後登入http://localhost:8080/myss2後一切正常,結束本天的教程。
PS:
一般我不喜歡把一個.war包扔到tomcat下去,而是喜歡把符合war目錄結構的這樣的一個目錄扔到tomcat的webapp目錄下,直到這個工程成品了,即透過測試後再打成war包以便於tomcat或者是weblogic、WAS的佈署,因此對於我來說在
系列
看完本文有收穫?請轉發分享給更多人
關註「ImportNew」,提升Java技能