使用Eclipse-Maven-git作Java開發(6)--介紹一下maven

        本文幾乎沒有什麼價值,你們能夠跳過,我會將有價值的部分整理髮布在下一篇博客。
html

        maven是什麼?回答能夠有不少,百度一下獲得的結果在有限的時間內應該是看不完的,我也不打算在這裏把那些別人說的粘貼過來,我打算儘可能用本身的話把我本身認識到的maven說一下。java

        因爲是「我本身認識到的maven」,因此有什麼不對的地方懇請你們指正,先謝謝啦。linux

0、能夠參考的資料

        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

        maven是一個使用java語言開發的軟件,負責java項目的依賴管理、項目構建、項目模塊管理、部署發佈和運行等等功能,咱們在不少的java開源項目中均可以看到一個叫作"pom.xml"的文件,並且並且不少時候java源代碼都放在叫作「src/main/java」的路徑下,這就是使用了maven的項目。網絡

        maven以前,人們要作一樣的事都是使用ant——Apache的另一個項目,可是如今愈來愈多的人都在使用maven了,這就好像git出現以後有愈來愈多的人使用git同樣,哪個更好用就用哪個。

        更多的關於maven的「正式」的介紹我就不說了,由於我也說很差,你們仍是看官方網站的說明吧,或者百度一下也有不少不錯的說明,下面我着重說一下我本身使用maven的體會。

二、初識maven

        我是在大二開始學習java的,當時就是用eclipse開發,新建工程、編寫代碼、運行代碼,頂多來一個tomcat部署(熱部署),後來還在網上看了打包war和jar,以爲好牛逼,這個和班上另外學asp.net的比起來好多了,由於他們一直都只能在vs裏面運行根本不會打包發佈,我還能夠打包發佈到另外的機器上去。

        後來大四除去公司裏面實習,當時因爲各類緣由,就我一我的負責java方面的開發,所有東西都是我本身來,後來因爲一些緣由須要讓工程可以在不須要IDE環境的狀況下打包,並且還有多是不懂java的人來操做(當時具體的狀況忘了)。我就網上找資料,反正我內心以爲是能夠作到的,後來就找到了maven。

        當時是2014年的年初,大概在1月份左右吧,以前寢室裏有一個哥們兒使用過maven,我也沒有太在乎,以爲沒有什麼實際用途(是否是很目光短淺?),以後就是摸石頭過河,一週以後我就以爲根本離不開maven了。

        一直到如今,個人全部項目都是使用maven的。

三、maven爲何讓我離不開

        這個問題很難回答,我先說點題外話。

        大一的時候學過linux,但當時根本沒有當回事,也就是混過去了。到了大三,又學習一些課程,有許多都涉及到了linux,這時就有意識的去了解、熟悉了linux,以後我就徹底的喜歡上了它,並且熱衷於RedHat系的(現在公司裏面的工做機就是Fedora)。

        回過頭來,對於maven,我剛開始只是把它看成工具,僅僅是爲了完成能讓「外行人」能打包出部署包。後來等我用了以後,就發覺絕對不能沒有他啊。

        (使用maven)之前咱們開發的時候第一步就是新建工程(參看前一篇博客),裏面有不少與環境相關的參數須要指定,雖然有默認值,可是每次仍是須要很仔細的查看一下,並且若是是多人一塊兒開發的話,每一個人之間環境上的一點小小的差別就有可能引起很大的問題。

        第二步就是引入依賴的各類庫,這也是很頭疼的一項工做,先要找到對應的jar文件,而後須要根據項目類型將文件以合理的方式引入進來,還須要放入版本控制裏面,之後更換的話還須要從新來過。並且這仍是順利的狀況,不順利的話……哎,說多了都是淚啊,作過的人都懂的。

        接下來就是編寫代碼、測試,這沒什麼。

        有時候須要打包到不是本身機器的環境中去進行運行,(測試、正式發佈等等),eclipse本身有相關的嚮導能夠進行這個操做,熟悉了以後也沒有什麼問題,只不過就是繁瑣一點,並且有可能會出錯。若是須要反覆打包不少次的話,估計有點夠嗆。

        而在使用了maven以後,pom.xml就是一個項目的全部配置(從某一些方面來講,一個pom.xml不夠,可是確實一個工程一個pom.xml足夠),引入依賴只須要說清楚你要的是什麼就好了,打包也就是一條命令的事。多我的之間環境不一致的問題幾乎不會出現(少數狀況下也會出現)。

        這彷佛就是我爲何會愛上它的緣由。

四、怎麼樣使用maven

        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項目的默認文件結構

        前面說了,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!

相關文章
相關標籤/搜索