本文幾乎沒有什麼價值,你們能夠跳過,我會將有價值的部分整理髮布在下一篇博客。
html
maven是什麼?回答能夠有不少,百度一下獲得的結果在有限的時間內應該是看不完的,我也不打算在這裏把那些別人說的粘貼過來,我打算儘可能用本身的話把我本身認識到的maven說一下。java
因爲是「我本身認識到的maven」,因此有什麼不對的地方懇請你們指正,先謝謝啦。linux
maven是Apache基金會的項目,能夠理解爲一個軟件,更能夠理解爲一種開發管理方式,下面就是關於他的頗有用的資料:git
官方網站:http://maven.apache.org/web
中央倉庫:http://search.maven.org/
spring
eclipse的m2e項目:https://projects.eclipse.org/projects/technology.m2e
apache
osc的maven倉庫:http://maven.oschina.net/home.html
spring-mvc
其餘的還有不少,最主要的仍是官方網站和中央倉庫。tomcat
maven是一個使用java語言開發的軟件,負責java項目的依賴管理、項目構建、項目模塊管理、部署發佈和運行等等功能,咱們在不少的java開源項目中均可以看到一個叫作"pom.xml"的文件,並且並且不少時候java源代碼都放在叫作「src/main/java」的路徑下,這就是使用了maven的項目。網絡
maven以前,人們要作一樣的事都是使用ant——Apache的另一個項目,可是如今愈來愈多的人都在使用maven了,這就好像git出現以後有愈來愈多的人使用git同樣,哪個更好用就用哪個。
更多的關於maven的「正式」的介紹我就不說了,由於我也說很差,你們仍是看官方網站的說明吧,或者百度一下也有不少不錯的說明,下面我着重說一下我本身使用maven的體會。
我是在大二開始學習java的,當時就是用eclipse開發,新建工程、編寫代碼、運行代碼,頂多來一個tomcat部署(熱部署),後來還在網上看了打包war和jar,以爲好牛逼,這個和班上另外學asp.net的比起來好多了,由於他們一直都只能在vs裏面運行根本不會打包發佈,我還能夠打包發佈到另外的機器上去。
後來大四除去公司裏面實習,當時因爲各類緣由,就我一我的負責java方面的開發,所有東西都是我本身來,後來因爲一些緣由須要讓工程可以在不須要IDE環境的狀況下打包,並且還有多是不懂java的人來操做(當時具體的狀況忘了)。我就網上找資料,反正我內心以爲是能夠作到的,後來就找到了maven。
當時是2014年的年初,大概在1月份左右吧,以前寢室裏有一個哥們兒使用過maven,我也沒有太在乎,以爲沒有什麼實際用途(是否是很目光短淺?),以後就是摸石頭過河,一週以後我就以爲根本離不開maven了。
一直到如今,個人全部項目都是使用maven的。
這個問題很難回答,我先說點題外話。
大一的時候學過linux,但當時根本沒有當回事,也就是混過去了。到了大三,又學習一些課程,有許多都涉及到了linux,這時就有意識的去了解、熟悉了linux,以後我就徹底的喜歡上了它,並且熱衷於RedHat系的(現在公司裏面的工做機就是Fedora)。
回過頭來,對於maven,我剛開始只是把它看成工具,僅僅是爲了完成能讓「外行人」能打包出部署包。後來等我用了以後,就發覺絕對不能沒有他啊。
(使用maven)之前咱們開發的時候第一步就是新建工程(參看前一篇博客),裏面有不少與環境相關的參數須要指定,雖然有默認值,可是每次仍是須要很仔細的查看一下,並且若是是多人一塊兒開發的話,每一個人之間環境上的一點小小的差別就有可能引起很大的問題。
第二步就是引入依賴的各類庫,這也是很頭疼的一項工做,先要找到對應的jar文件,而後須要根據項目類型將文件以合理的方式引入進來,還須要放入版本控制裏面,之後更換的話還須要從新來過。並且這仍是順利的狀況,不順利的話……哎,說多了都是淚啊,作過的人都懂的。
接下來就是編寫代碼、測試,這沒什麼。
有時候須要打包到不是本身機器的環境中去進行運行,(測試、正式發佈等等),eclipse本身有相關的嚮導能夠進行這個操做,熟悉了以後也沒有什麼問題,只不過就是繁瑣一點,並且有可能會出錯。若是須要反覆打包不少次的話,估計有點夠嗆。
而在使用了maven以後,pom.xml就是一個項目的全部配置(從某一些方面來講,一個pom.xml不夠,可是確實一個工程一個pom.xml足夠),引入依賴只須要說清楚你要的是什麼就好了,打包也就是一條命令的事。多我的之間環境不一致的問題幾乎不會出現(少數狀況下也會出現)。
這彷佛就是我爲何會愛上它的緣由。
maven是用java寫的,因此要使用maven,須要的條件有:合適版本以及架構的maven軟件、java運行環境、網絡。
前面兩個很好理解,後面的網絡是怎麼回事?很簡單,①maven是基於插件的,直接下載的maven軟件不足以完成其基本功能,須要從網絡下載;②項目配置的依賴庫不可能憑空出現吧,須要從網絡上下載。固然,這些對網絡的須要不是每時每刻都須要的,maven會將下載來的文件存在本地,只有在須要的文件本地沒有的狀況下才會從網絡下載,系在的地方在沒有配置的狀況下就是中央倉庫,有時候網絡很差的話就有點困難了,好在咱們還有OSC的maven鏡像(http://maven.oschina.net/home.html),同時我還建議有田間的話,能夠搭建maven的私有倉庫,搭建方法在這裏:http://my.oschina.net/songxinqiang/blog/343477這個是我本身搭建私有倉庫的記錄。
這些外在的說了,對於要使用maven的項目來講,還須要一些內在的條件,硬性需求就只有一個:pom.xml文件。非必須的條件就是文件按照必定的組織方式進行放置,之因此這個不是必須的,是由於能夠再pom.xml文件中對沒有按照要求放置的文件進行配置說明。
maven的配置使用的是xml,並且在maven內部有一個基礎的配置,咱們的配置其實是「繼承」下來的,通常稱爲「約定」,所謂的「約定優於配置」(我認爲更應該說成「配置優於約定」,由於你配置了那麼約定就不起做用了)。至於pom.xml到底該怎麼配置,這個還得根據項目狀況來講,能夠參考官方說明來作,不過通用的、都有的配置包括:項目座標、依賴、構建方式、打包配置。(具體配置內容不在本文討論範圍)
前面說了,maven對項目的文件結構有一個「約定」的,若是按照這個來放文件,就不用單獨配置了,並且一想都知道,咱們應該儘可能按照這個「約定」來放,下面就說一下默認的文件結構是什麼樣子的(只說常見到的文件)。
a.java源文件:src/main/java
b.配置文件:src/main/resources
c.測試的java源文件:src/test/java
d.測試的配置文件:src/test/resources
e.web項目的web根目錄:src/main/webapp
f.編譯輸出目錄(maven編譯的時候用,咱們不用管):target
這些在eclipse的pom.xml查看裏面能夠經過「Effective POM」查看到的,在<build>裏面
<sourceDirectory>E:\Workspaces\GITWDir\Billing\src\main\java</sourceDirectory> <scriptSourceDirectory>E:\Workspaces\GITWDir\Billing\src\main\scripts</scriptSourceDirectory> <testSourceDirectory>E:\Workspaces\GITWDir\Billing\src\test\java</testSourceDirectory> <outputDirectory>E:\Workspaces\GITWDir\Billing\target\classes</outputDirectory> <testOutputDirectory>E:\Workspaces\GITWDir\Billing\target\test-classes</testOutputDirectory> <resources> <resource> <directory>E:\Workspaces\GITWDir\Billing\src\main\resources</directory> </resource> </resources> <testResources> <testResource> <directory>E:\Workspaces\GITWDir\Billing\src\test\resources</directory> </testResource> </testResources> <directory>E:\Workspaces\GITWDir\Billing\target</directory>
能夠看到,這裏的路徑都已經轉成了文件系統裏面的絕對路徑的了。
樹形圖大概是這個樣子的(將沒有必要的部份內容刪去):
│ pom.xml │ ├─src │ ├─main │ │ ├─java │ │ │ │ │ ├─resources │ │ │ log4j.properties │ │ │ spring-config.xml │ │ │ spring-mvc.xml │ │ │ │ │ └─webapp │ │ │ │ │ └─WEB-INF │ │ web.xml │ │ │ └─test │ └─java │ └─target ├─classes │ ├─m2e-wtp │ └─web-resources │ └─META-INF │ │ MANIFEST.MF │ │ │ └─maven │ └─test-classes
詳細的細節在後面的博客中會進行說明。
要知道maven是一個什麼樣的軟件,使用maven的項目是什麼樣子的,怎麼使用maven(這個問題後面會進行詳細說明)。
有什麼不對的地方還望你們指出來。
下一篇博客是對本文的整理。
enjoy!