天天看點

關于Maven的了解

最近兩個月項目用到了Maven,之前聽過Maven,但是一直沒有機會用。Maven的入門其實不難,大概一兩天的時間,就可以做一些基本的事情了。是以在開始用Maven的時候,我是挺不了解為什麼要用這個技術的。因為Maven說白了,就是在用一個pom.xml檔案來對項目進行管理,maven程式就是通過這個pom.xml檔案,去生成相應的項目(war包等)。而所謂的依賴,其實就是将所有需要用到的jar以某種規則(maven裡就叫做坐标)寫到pom.xml檔案裡,maven就會根據這些資訊到網上幫我們下載下傳需要的jar,而不是像以前那樣,我們需要自己去下載下傳jar檔案,然後再将jar放到某個目錄(例如lib)裡。我們可以經常在網上看到一些教程,說maven這樣做給我們帶來了很多友善,因為不用我們直接去下載下傳jar包,其實我覺得就這一點來說,還真沒展現出maven的好處,因為要讓maven知道我們所需要的jar包,我們是要先去找坐标,去網上查一下groupId,version,artifactId等等這些資訊,然後寫到pom.xml檔案去;這跟我們直接去官網找jar包,我想是沒多大的優勢的。

但是随着Maven的不斷學習,我逐漸明白,為什麼要用Maven來管理項目。其實不是上面提到的下不下載下傳的問題,而是maven有其他更加強大的功能。例如我們用Maven的話,可以将一個項目分成多個子產品,以傳統的MVC模式為例,我們可以将dao層做為一個子產品來管理(其實我們可以了解為就是eclipse裡的一個項目,隻是到最後,這個項目不打成war包,而是打成了jar包的形式),service層,utilities等幾個子產品。這幾個子產品到最後都可以打成jar包供别人調用,彼此之間有依賴關系。這有什麼好外呢?一、可以為這幾個子產品建立權限。例如utilities包這種基礎包,它應該是隻能讓某些人去修改,那麼在svn上,我們就隻讓某些人check out修改,其他人隻能引用。二、重用。例如utilites子產品,假如現在這個項目做完了,但是這個utilites子產品對我們之後的項目還是可以用的啊?這沒有問題,因為我們是以一個項目的形式來管理這個子產品的,那麼我們隻需要在其他的項目配置一下引入這個子產品就可以了,而不用從原來的項目抽取分離代碼,這樣做對我們建立管理自己的基礎類庫有很大的幫助。三、部署更新的時候友善。因為其中一個子產品的修改,我們隻需要将其打成jar包後,把原來的jar給替換就可以了,不用将所有的配置檔案和.class檔案都換了。四、可以直接檢視開源的代碼。如果用以前的方式的話,是要反編譯或者去網上down源碼下來看的,而且down下來的跟目前的項目是聯系不上的,隻能自己慢慢找。但是用maven就不同了,在eclipse裡maven就可以直接幫我們下載下傳源碼,而且跟目前項目緊密聯系,這個對我們的學習或者解決問題都有莫大的好處。

學習maven,我覺得有以下幾點是需要了解清楚的:

1、maven的pom.xml檔案裡常用節點的作用,例如groupId,dependency,build等節點的意思。

2、插件的配置和插件在編譯打包時的作用。例如有時候我們打成war包時,我們并不想将一些靜态資源打入war包,因為我們有自己的apache,nginx等伺服器,這個時候我們就可以用war插件來幫我們打包,因為maven預設是沒有這些功能的。當然,還有其他的插件,例如用jetty來做調試等等。至于到哪裡查找這些插件,則可以去這個網址看一下:http://maven.apache.org/plugins/。

3、生命周期。這個對我們了解maven的指令有很大的幫助,例如mvn install等指令,究竟maven是做了什麼工作,通過這個生命周期的解釋,我們可以很清晰的明白。

4、插件解析機制。