歡迎光臨
每天分享高質量文章

通向架構師的道路 ( 第二十三天 ) maven 與 ant 的奇妙整合

(點選上方公眾號,可快速關註)


來源:袁鳴凱 ,

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技能

贊(0)

分享創造快樂