前些天就安裝了Maven,以備自己以后整合項目用,尤其是我們的ssh,ssm項目。想必好多人在開始的時候並不清楚Maven是什么,它能夠幫助我們干什么。
所以在學習Maven之前我們一定要知道它是什么,並且知道它能夠幫助我們干什么!
Maven是什么:
這里博主就偷個懶,引用了百度百科上面的解釋,它的解釋可能不一定完全描述這個Maven,但是對於初學者我們知道這個就行了。
Maven能夠幫助我們干什么:
它的主要兩個功能:
- 依賴管理(jar包管理)
- 構建項目
①我們知道java項目(web)在開發的過程中需要大量的jar包,這個導致我們的項目會非常的龐大,通過Maven,我們web項目再也不用導jar包了,我們只需要在Maven的主配置文件中添加相應jar包的標識(標識:公司或者組織名+項目名+版本號)就好了。
②項目的構建,我們可以通過Maven構建Maven項目,它開創了一套目錄結構,對各種文件的分類更加的細致。
簡單的介紹就到這里,更深入的我們后面慢慢提及。
(一)下載安裝
廢話少說,接下來我們到官網上下載Maven:http://maven.apache.org/
下載你想要的版本,然后解壓到你的本地磁盤(路徑不能有中文),最后就是配置環境變量(Maven的工作環境要有jdk,即要使用Maven就要有jdk環境),關於配置環境變量:前些天我碰到個小問題在也在我的一篇博文中簡單描述了一下:
http://blog.csdn.net/qq_39266910/article/details/78708412
有興趣的同學可以去看看!
(二)Maven倉庫分類及配置
解壓Maven過后就要配置Maven本地倉庫,在說本地倉庫前,我們先了解下Maven的分類:
(圖片來自網絡)
這個就是Maven倉庫的三種類型,一個是我們程序員本地計算機上的本地倉庫,默認目錄為:C:\Users\john.m2\repository
當然我們可以修改這個路徑,也就是配置我們的本地倉庫了:
再塗鴉的路徑下的setting文件下,找到<localRepository>
標簽(原來在注釋中,需要我們將它復制出來),並填上你想要的本地倉庫路徑。
(三)在eclipse中創建Maven項目
和我們通常創建項目一樣,我們可以在File→new→
填寫工作組,項目名,就可以完成創建Maven項目了。
下面我們來看看Maven項目的目錄結構:
(四)Maven常用的命令
以下所有的命令都要在項目的根目錄下進行。
Maven提供了一套命令,我們可以在dos小黑窗中使用,當對Maven項目使用這些命令的時候我們應該切換到該項目的根目錄下。
命令一:
mvn clean
這個命令可以清除我們的target文件夾(這個文件夾存放編譯后的.class文件)
命令二:
mvn compile
和上面的命令相反,這個命令是編譯一個項目的,前提是我們當前命令行位置為該項目的根目錄下。
命令三:
mvn test
這個命令可以進行單元測試,測試test文件夾下的方法(test文件夾下的java文件格式名為:XxxTest.java)
命令四:
mvn package
將項目打包,如果是java項目就打包為.jar文件,如果是web項目及打包成.war文件。
命令五:
mvn install
將一個項目打包放在本地倉庫中,以便多個項目使用。
(五)在eclipse中配置Maven
我們之前在eclipse中創建了項目,那個使用eclipse中自帶的Maven插件,我們想要用自己安裝的Maven,需要在eclipse中配置:
在首選項的Maven中安裝,add→directory中選擇自己安裝的目錄。
然后別忘了勾選我們自己的Maven。
我們還需要指定我們Maven的倉庫位置,也就是讓eclipse知道我們的倉庫在哪,我們只要將Maven中已經設置好的setting.xml指定給它就行,因為里面已經含有我們自定義倉庫的位置,設置后下面就會自動出現我本地倉庫的位置。
完成上面的操作后,我們還需要重構索引,即將倉庫中的內容讓eclipse加載一下:
這樣就能在eclipse local Repository中查看我們本地倉庫的內容了。
如果你完成了上述的操作,那么恭喜你,你的eclipse就完全支持maven操作了!
(六)創建Maven項目容易出現的問題
在創建好Maven項目后老是會出現一些問題:
①jdk版本出錯
Maven(我的這個版本)默認是使用jdk1.5,如果你想要使用自己的jdk的話需要右擊項目,build path ,edit一下當前項目使用的jdk就ok了。
②缺少web.xml
當我們創建好項目的時候可能缺少web.xml,這個時候我們需要自己手動的添加。
③刷新項目,jdk版本又返回jdk1.5
我們在做項目的時候,依賴在不斷的增加,所以需要刷新項目來使得eclipse知道我們的jar包在哪,所以需要更新Maven項目:
右擊項目→Maven→Update Project,然后我們的jdk會返回jdk1.5(因為項目默認jdk1.5),所以需要我們手動添加對jdk的約束:
設置全局的jdk,在setting.xml文件中的profiles元素下添加如下profile元素:
<profile>
<id>jdk17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
設置局部的jdk,在項目的pom,xml文件中添加如下build元素:
<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怎么進行依賴管理。
我們在Maven項目中創建一個Servlet,我們需要導入servlet-api.jar,只要在pom.xml 的dependencies視圖下進行add就好了,如下圖:
在塗鴉的搜索欄里搜索你想要的jar包,然后update Maven項目就ok了。
容易出現的問題:
搜索不出結果,試着做如下操作:
首選項→Maven→勾選塗鴉的選項
然后點擊:
這樣就會幫你下載一些常用jar包,過程有點慢,等待片刻!
最后Update Index 就ok了!
這樣就可以放心的添加依賴了。
(八)依賴范圍
在我們設置依賴的時候,會有一項Scope,里面有:
compile,provided,runtime,test,system五項。
(圖片來自網絡)
Maven默認的是compile,即對於編譯classpath,測試classpath,運行時classpath 都需要這個jar包。
尤其值得注意的是provided,這個就像servlet-api那樣,我們編譯測試都需要這個jar包,但是當上傳到服務器的時候就不再需要了(Tomcat的lib下有),如果這里我們默認compile,那么當程序在服務器上運行的時候將出現jar包的沖突!
(九)使用Maven運行web項目
在eclipse中,我們是直接打開Tomcat,並將項目添加到Tomcat上,Maven也可以直接啟動Tomcat而不需要借助Eclipse,具體的步驟:
右擊項目→Run As→Maven Build ...
然后在Goals中輸入:
tomcat:run,這樣我們就將這個項目發布到服務器上了。
Debug:
右擊項目→Debug As→Maven Build ...
然后在Goals中輸入:
tomcat:run,和發布不同的是,我們需要將項目的源碼關聯進來!
過程:點擊Source→add→Project→你想Debug的項目。
(十)依賴沖突解決
什么叫依賴沖突,在介紹它和解決它之前,我們先來了解下什么事傳遞依賴:
在一個Maven項目中,我們導入一個包后,Maven會幫你把它的依賴包全部導入進來,例如:你導入Struts2-core-2.3.5.jar,它會幫你把Struts2工程所需要的包全部導入進來,如果導入進來的jar包又依賴其他jar包,Maven會繼續導入這個其他jar包。
所以就會產生這樣一個狀況:
A依賴B,B依賴C,A依賴C,這樣叫一個傳遞依賴。
在上述的情況下,如果這個時候導入依賴D,D依賴C,這個時候就可能出現兩個C,就會產生依賴沖突!
解決方案:
其實Maven不會讓這兩個jar包沖突,它有一套默認的調節原則:
①聲明優先原則:
如果B依賴的C和D依賴的C沖突,那么使用B依賴的C jar包,因為B提前導入。
②最短路徑原則:
如果我們就是想要使用D依賴的C jar包,我們只需要自己手動add依賴即可,Maven優先使用我們手動添加的依賴!
除了上面的兩種方案,還有兩種叫分別叫做
①依賴排除
具體的實在pom.xml的依賴層次視圖下進行:
這樣就可以手動的排除你不想使用的依賴jar包了。
②版本鎖定(推薦使用)
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>
在配置文件里添加上面這個依賴管理,就可以指定我們想要的jar包版本,同時我們還可以使用ognl表達式來管理版本(當版本更新的時候)
當我們版本需要更新的時候,不必一個個去更換,只需要更換properties中的版本信息就Ok了!
總結:
Maven給我們構建項目和依賴管理帶來了很大的便利,再也不需要我們苦惱導入jar包,和jar包版本沖突,並且提供了一套從編譯到發布的方法,大大提高和加快了我們項目的項目進度。
本章主要就Maven的一些簡單用法做出了一點介紹,希望給大家一點啟發,如果錯誤,不吝賜教,萬分感激!