Maven用了半年多了,現(xiàn)在基本的使用已經(jīng)可以了巾遭,在這里進行一個總結,加深印象灼舍,同時幫助小白快速上手Maven
一涨薪、什么是Maven?
Maven是一個項目構建工具刚夺,能把項目抽象成一個POM(project object model),使用POM文件對項目進行構建侠姑、打包、文檔化等操作筐摘。最重要的是解決了項目依賴的問題船老,簡化項目環(huán)境搭建的過程;
二柳畔、為什么用Maven?
Maven最核心的功能:解決復雜項目依賴的問題确沸。怎么說?比如說你在項目中需要用到第三方jar包(如Mysql驅動)罗捎,去哪找呢。如果一個還好桨菜,到一個復雜的項目通常由幾十甚至上百個依賴組成,一個一個找怕不是累死泻红?而Maven就解決了這個問題,比如Mysql驅動谊路,只需要加入下面這一句即可:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
是不是很方便菩彬?
另一方面,項目的測試骗灶、打包、部署等操作矿卑,Maven也進行了簡化沃饶,同時對項目的結構有了統(tǒng)一的規(guī)范和約定,如源碼統(tǒng)一存放在src/main/java下琴昆,測試代碼統(tǒng)一存放在src/test/java下馆揉,資源文件統(tǒng)一存放在src/resources下,編譯后字節(jié)碼存放在target目錄下等等升酣。
一句話,Maven讓技術人員能夠專注在業(yè)務邏輯上噩茄,極大提高了開發(fā)效率;
三沥割、我的jar都是哪來的凿菩?
依賴倉庫有多種,位于Apache的中心倉庫http://mvnrepository.com/衅谷,柜內(nèi)外也有大量鏡像庫,如阿里云的Maven倉庫会喝,會與中心倉庫進行同步玩郊;同時可以創(chuàng)建公司私庫译红,用來發(fā)布和存放庫以提高下載速度或存放公司私有的jar便于統(tǒng)一管理;
無論依賴的jar來自哪個倉庫侦厚,在開發(fā)人員本地拙徽,Maven都會創(chuàng)建一個本地倉庫用于緩存已經(jīng)下載的jar,避免每次從倉庫下載想诅,默認地址為用戶文件夾下的.m2隱藏文件夾中。
四来破、Maven配置
Maven最核心的是pom.xml忘古,使用xml方式描述項目模型,pom通常有以下元素:
groupId:表示項目所屬的組髓堪,通常是一個公司或組織的名稱,如:org.springframework驶沼;
artifactId:項目唯一標識疤孕,如mysql-connector-java;
packaging:項目打包方式鹉戚,通常有war和jar兩種;
version:項目版本號专控;
注:
通常來說,項目版本號分為三段赢底,主版本號.次版本號.修訂版本號。主版本號變動代表架構變動或不兼容實現(xiàn)幸冻,次版本號是兼容性修改、功能增強庞溜,修訂版本號則是bug修復碑定。版本后綴意味著不同的項目階段,SNAPSHOT表示正在開發(fā)中的版本延刘,會修復bug和添加新的功能;RELEASE表示一個正式的版本碘赖,中間可能還有M1,M2(M代表里程碑秘车,即將發(fā)布)劫哼、RC(Release Candidate割笙,發(fā)布候選)、GA(General Availiable般码,基本可用版本)等表示即將發(fā)布前的各個過程乱顾。SNAPSHOT<M1<M2<...<RC<GA<RELEASE
modelVersion:pom的Maven版本,目前是4.0.0走净;
dependencies:此元素下包含多個dependency,用來聲明項目依賴橘洞,是pom中最核心的部分说搅;
dependency:包含在dependencies中,用來聲明項目依賴
dependency所包含的元素如下:
groupId、artifactId霍衫、version這三個與上面描述相同侯养,不再贅述;
scope:代表此類庫與本項目的關系沸毁,默認是compile,也就是編譯打包都需要此類庫携兵;test表示盡僅在單元測試的時候需要;provided表示編譯階段需要此類庫搂誉,帶打包階段不需要徐紧,因為項目環(huán)境中已經(jīng)提供了;runtime表示編譯和打包的時候都不需要炭懊,但運行的時候需要并级,如mysql驅動包;
optional:true/false侮腹,默認false嘲碧,激活時代表該依賴僅在本項目中使用,子項目需要時需要重新寫入該依賴父阻;
bulid:此項在pom中可選糕再,bulid包含了多個插件plugin用來輔助項目構建所森。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
早期Maven默認的Java版本是1.6盔粹,此處顯式聲明使用Java1.8編譯儡羔,源代碼使用的是UTF-8
五、其他:
關于Maven的安裝斟览、環(huán)境變量配置、阿里云鏡像切換苛茂,IDE集成網(wǎng)上有很多資源妓羊,這里不再贅述侍瑟;