我也是換了公司後作項目第一次接觸Maven,由於新手,因此寫點感悟與體驗。可是寫了一半時,百度一個知識點時看到了這篇文章,佩服,簡單易懂,還直擊重點,想必博主是個基礎很紮實的大神,妹子膜拜~因而直接ctrl+c過來了,好的東西值得咱們借鑑學習。想必這篇文章對本身會有用。java
一.前言web
之前作過的項目中,沒有真正的使用過Maven,只知道其名聲很大,其做用是用來管理jar 包的。最近一段時間在項目過程當中使用Maven,用Maven構建的web項目,其項目結構只停留在瞭解階段,沒有深刻的使用與理解,恰好最近看了一篇關於Maven的詳解;就開始深刻學習一下Maven的具體應用。apache
二.Maven的做用windows
下面咱們來對比一下,首先創建一個普通的Java工程,是這樣的:mybatis
這個咱們都很熟悉,src下建包寫代碼,那麼配置文件放在哪裏?單元測試代碼放在哪裏?沒有一個統一標準,更多時候都是開發者的自由發揮,每一個人有本身的風格,這並不十分適合團隊協做。接下來,看一下使用maven構建一個普通Java項目以後的目錄結構:app
看到使用Maven構建的普通Java項目,對源代碼、單元測試代碼、資源乃至後續須要的文件都有專門的目錄規劃。webapp
上面的最後有一個pom.xml,這是Maven的核心配置文件,pom稱爲Project Object Model(項目對象模型),它用於描述整個Maven項目,因此也稱爲Maven描述文件。maven
固然事情不會這麼簡單,接下來,繼續進入Maven的世界吧。工具
pom.xml單元測試
打開pom.xml,最基礎的是這樣的:
1
2
3
4
5
6
7
8
9
10
|
<project xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xrq.withmaven</groupId>
<artifactId>withmaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build/>
</project>
|
由於這個配置文件是Maven的核心,所以有必要詳細解讀一下pom.xml,來先看一下上面的幾個:
一、modelVersion
指定了當前Maven模型的版本號,對於Maven2和Maven3來講,它只能是4.0.0
二、groupId
顧名思義,這個應該是公司名或是組織名。通常來講groupId是由三個部分組成,每一個部分之間以"."分隔,第一部分是項目用途,好比用於商業的就是"com",用於非營利性組織的就 是"org";第二部分是公司名,好比"tengxun"、"baidu"、"alibaba";第三部分是你的項目名
三、artifactId
能夠認爲是Maven構建的項目名,好比你的項目中有子項目,就可使用"項目名-子項目名"的命名方式
四、version
版本號,SNAPSHOT意爲快照,說明該項目還在開發中,是不穩定的版本。在Maven中很重要的一點是,groupId、artifactId、version三個元素生成了一個Maven項目的基本座標,這很是重要,我在使用和研究Maven的時候屢次感覺到了這點。
在上面的這些元素以外,還有一些元素,一樣羅列一下:
一、packing
項目打包的類型,可使jar、war、rar、ear、pom,默認是jar
二、dependencies和dependency
前者包含後者。前面說了,Maven的一個重要做用就是統一管理jar包,爲了一個項目能夠build或運行,項目中不可避免的,會依賴不少其餘的jar包,在Maven中,這些依賴就被稱爲dependency。
說到這裏,就有一個本地倉庫和遠程倉庫的概念了。官方下載的本地倉庫的配置在"%MAVEN_HOME%\conf\settings.xml"裏面,找一下"localRepository"就能夠了;MyEclipse默認的本地倉庫的地址在"{user.home}/.m2/repository"路徑下,一樣找一下"localRepository"就能夠找到MyEclipse默認的本地倉庫了。
本地倉庫和遠程倉庫是這樣的,Maven工程首先會從本地倉庫中獲取jar包,當沒法獲取指定jar包時,本地倉庫會從遠程倉庫(中央倉庫)中下載jar包,並放入本地倉庫以備未來使用。
舉個例子,比方說個人項目中用到了MyBatis,那麼能夠這麼配置:
1
2
3
4
5
6
7
|
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.5</version>
</dependency>
</dependencies>
|
以前有說過groupId、artifactId、version惟一標識一個Maven項目,有了這三個元素,咱們就能夠去遠程倉庫下載MyBatis3.2.5.jar到本地倉庫了。回想咱們以前的作法,若是要MyBatis的jar包,發現沒有,而後去網上下載一個,須要另外的jar包,而後去網上下載一個,可是有了Maven,就方便多了,只須要配置jar包對應的dependency依賴,Maven會自動幫助咱們去遠程倉庫中下載jar包到本地倉庫中。
三、properties
properties是用來定義一些配置屬性的,例如project.build.sourceEncoding(項目構建源碼編碼方式),能夠設置爲UTF-8,防止中文亂碼,也可定義相關構建版本號,便於往後統一升級。
四、build
build表示與構建相關的配置,好比build下有finalName,表示的就是最終構建以後的名稱。
接着解釋一下Maven的目錄結構:
三.Maven環境配置
經常使用的開發工具Idea、MyEclipse裏面都已經集成了Maven了,不過最好是從官網下一個配置到本身電腦裏,開發工具裏的可能有少量的Bug。
首先去Maven官網,下載Maven的包,地址爲http://maven.apache.org/download.cgi,找到下面的部分,點擊就能夠下載了:
下載完解壓,而後配置一下環境變量,和JDK的環境變量配置相似:
這樣配置完就能夠了,驗證一下,windows+r打開命令窗口,輸入"mvn --version",若是有下面的內容這表示Maven配置OK:
Maven入門使用常見問題
一、我從SVN上下載了一個以Maven構建的工程,下載完畢沒有jar包怎麼辦?
從資源庫上下載下來的Maven工程,是沒有jar包的,此時能夠這麼作:
(1)刪除Maven工程,可是刪除的時候不要刪除本地工程裏面的Maven工程,只刪除MyEclipse中的Maven工程
(2)右鍵Import->Maven4MyEclipse->Existing Maven Projects,導入你的Maven工程,此時MyEclipse在構建工程的時候,假如你的本地倉庫中沒有dependcy中的jar包,便會去遠程倉庫下載jar包到本地倉庫中。你的工程導入完畢以後,Library應該是這樣的:
二、從新下載Maven工程所依賴的jar包、導入jar包都須要觸發Maven工程的build workspace,那麼如何才能觸發Maven工程的build workspace?
找到一個pom.xml,隨便修改一下,加一個空格、減一個空格什麼的,ctrl+s保存一下,便會觸發Maven工程的build workspace了
三、本地倉庫的目錄結構是什麼樣子的?
groupId、artifactId、version肯定一個惟一的Maven,比方說我有一個mybatis的dependcy:
1
2
3
4
5
|
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.5</version>
</dependency>
|
那麼mybatis的jar包應該在%Maven倉庫地址%\org\mybatis\mybatis\3.2.5\這一路徑下,看到了吧,先groupId,再mybatis,最後version,每一個名字都是一個文件夾的名字
四、有些jar包在dependcy裏面有配置,Import了Maven工程,下載完工程所依賴的jar包以後,發現本地倉庫裏面卻沒有,怎麼辦?
多是原先下載jar包的時候出了什麼問題,從artifactId目錄開始刪除如下的全部文件/文件夾,而後觸發一次Maven工程的build workspace就能夠了
五、本地倉庫中肯定已經有jar包了,工程裏面卻報錯,說找不到jar包,該怎麼辦?
應該有不少解決辦法,目前解決的一種辦法是,MyEclipse->Window->Preferences->搜索Maven->User Settings,Update Settings和Reindex點一下就行了。另外,能夠嘗試一下把本地Maven倉庫內的jar包刪除一下,而後從新build workspace,可能也能夠。