前言
在這之前一直都有去看關於Maven的相關介紹,但是沒有到真正要用的時候,自己總是以為懂了。其實真的感覺Maven並沒有想象的那么簡單!
那我們該怎么去學習maven呢?接下來我將從:
初步認識maven,獲取jar包的三個關鍵屬性 --> 介紹倉庫(獲取的jar包從何而來)-->用命令行管理maven項目(創建maven項目) --> 用myeclipse創建maven項目 -->詳細介紹pom.xml中的依賴關系(坐標獲取、定位jar包的各種屬性講解)。
為什么要去使用maven呢?
舉例1:假如你正在Eclipse下開發兩個Java項目,姑且把它們稱為A、B,其中A項目中的一些功能依賴於B項目中的某些類,那么如何維系這種依賴關系的呢?
很簡單,這不就是跟我們之前寫程序時一樣嗎,需要用哪個項目中的哪些類,也就是用別人寫好了的功能代碼,導入jar包即可。所以這里也如此,可以將B項目打成jar包,然后在A項目的Library下導入B的jar文件,這樣,A項目就可以調用B項目中的某些類了。
這樣做幾種缺陷
如果在開發過程中,發現B中的bug,則必須將B項目修改好,並重新將B打包並對A項目進行重編譯操作
在完成A項目的開發后,為了保證A的正常運行,就需要依賴B(就像在使用某個jar包時必須依賴另外一個jar一樣),兩種解決方案,第一種,選擇將B打包入A中,第二種,將B也發布出去,等別人需要用A時,告訴開發者,想要用A就必須在導入Bjar包。
兩個都很麻煩,前者可能造成資源的浪費(比如,開發者可能正在開發依賴B的其它項目,B已經存儲到本地了,在導入A的jar包的話,就有了兩個B的jar),后者是我們常遇到的,找各種jar包,非常麻煩(有了maven就不一樣了)
舉例2:我們開發一個項目,或者做一個小demo,比如用SSM框架,那么我們就必須將SSM框架所用的幾十個依賴的jar包依次找出來並手動導入,超級繁瑣。
上面兩個問題的描述,其實都屬於項目與項目之間依賴的問題[A項目使用SSM的所有jar,就說A項目依賴SSM],人為手動的去解決,很繁瑣,也不方便,所以使用maven來幫我們管理。
一、Maven概述
1.1、Maven介紹
Maven可以翻譯為“知識的積累”、“專家”、“內行”。作為Apache組織中的一個頗為成功的開源項目,Maven主要服務於基於Java平台的項目構建、依賴管理、和項目信息管理。Maven在各類項目中都可以大顯身手。
1) Maven是優秀的構建工具
除了編寫源代碼,我們每天有相當一部分時間花在了編譯,運行單元測試,生成文檔,打包,部署等繁瑣且不起眼的工作上,這就是構建。Maven就是一個異常強大的構建工具,能夠幫我們自動化構建過程,從清理,編譯,測試,到生成報告,再到打包和部署。
我們不需要一遍一遍的輸入命令, 一次又一次點擊鼠標,Maven幫我們很方便的搞定。Maven是跨平台的。
2) Maven還是依賴管理工具和項目信息管理工具
Maven通過一組坐標能夠找到任何一個Java類庫(如jar),Maven給這個類庫世界引入了經緯,讓它們變得有秩序,於是我們可以借助它來有序地管理依賴,輕松地解決那些繁雜的依賴問題。
Maven還能幫助我們管理原本分散在項目中各個角落的項目信息,包括項目描述,開發者列表,版本控制系統地址,許可證,缺陷管理系統地址等。除了直接的項目信息,通過Maven自動生成的站點,
以及一些已有的插件,我們還能輕松地獲得項目文檔、測試報告、靜態分析報告、源碼版本日志報告等非常具有價值的項目信息。
3) 倉庫
Maven為全世界的Java開發者提供了一個免費的中央倉庫,在其中幾乎可以找到任何流行開源類庫。通過Maven的一些衍生工具(如Nexus),我們還能對其進行快速地搜索。只要定位了坐標,Maven就能夠幫我們自動下載,省去了手工勞動。
1.2、理解Maven
如果沒明白maven是什么,那個人覺得,Maven的核心功能便是合理敘述項目間的依賴關系,通俗點講,就是通過pom.xml文件的配置獲取jar包,而不用手動去添加jar包,而這里pom.xml文件對於學了一點maven的人來說,就有些熟悉了。
怎么通過pom.xml的配置就可以獲取到jar包呢?pom.xml配置文件從何而來?等等類似問題我們需要搞清楚,如果需要使用pom.xml來獲取jar包,那么首先該項目就必須為maven項目,
maven項目可以這樣去想,就是在java項目和web項目的上面包裹了一層maven,本質上java項目還是java項目,web項目還是web項目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通過pom.xml添加jar包)。
所以,根據上一段的描述,我們最終的目的就是學會如何在pom.xml中配置獲取到我們想要的jar包,在此之前我們就必須了解如何創建maven項目,maven項目的結構是怎樣,與普通java,web項目的區別在哪里,還有如何配置pom.xml獲取到對應的jar包等等。
1.3、項目的構建與依賴管理
項目構建過程包括【清理項目】→【編譯項目】→【測試項目】→【生成測試報告】→【打包項目】→【部署項目】這幾個步驟,這六個步驟就是一個項目的完整構建過程。
依賴指的是jar包之間的相互依賴,比如我們搭建一個Struts2的開發框架時,光光有struts2-core-2.3.16.3.jar這個jar包是不行的,struts2-core-2.3.16.3.jar還依賴其它的jar包,
依賴管理指的就是使用Maven來管理項目中使用到的jar包,Maven管理的方式就是“自動下載項目所需要的jar包,統一管理jar包之間的依賴關系”。
1.4、Maven的優點
1)Maven中使用約定,約定java源代碼代碼必須放在哪個目錄下,編譯好的java代碼又必須放到哪個目錄下,這些目錄都有明確的約定。
2)Maven的每一個動作都擁有一個生命周期,例如執行 mvn install 就可以自動執行編譯,測試,打包等構建過程。
3)只需要定義一個pom.xml,然后把源碼放到默認的目錄,Maven幫我們處理其他事情
4)使用Maven可以進行項目高度自動化構建,依賴管理(這是使用Maven最大的好處),倉庫管理。
二、Maven的安裝
2.1、Maven的下載
下載地址是:http://maven.apache.org/download.cgi
下載完成后,得到一個壓縮包解壓,可以看到maven的組成目錄
目錄介紹:
bin:含有mvn運行的腳本
boot:含有plexus-classworlds類加載器框架
conf:含有settings.xml配置文件
lib:含有Maven運行時所需要的java類庫
LICENSE.txt, NOTICE.txt, README.txt針對Maven版本,第三方軟件等簡要介紹
2.2、Maven的安裝
1)首先你要確保你的電腦已經安裝了jdk1.6版本以上的,並配置好了JDK的環境變量。
2)對apache-maven-3.3.9-bin.zip進行解壓縮,例如解壓到如下目錄(解壓目錄最好不要有中文)
3)第三步:配置環境變量
4)設置環境變量path,將%M2_HOME%\bin加入到path中,一定要注意使用分號;隔開。
5)驗證是否配置成功:打開cmd命令——>輸入:mvn-v
三、Maven倉庫
通過pom.xml中的配置,就能夠獲取到想要的jar包(還沒講解如何配置先需要了解一下倉庫的概念),但是這些jar是在哪里呢?就是我們從哪里獲取到的這些jar包?答案就是倉庫(用來統一存儲所有Maven共享構建的位置)。
倉庫分為:本地倉庫、第三方倉庫(私服)、中央倉庫
3.1、本地倉庫
Maven會將工程中依賴的構件(Jar包)從遠程下載到本機一個目錄下管理,每個電腦默認的倉庫是在 $user.home/.m2/repository下
我的就是在:C:\Users\Shinelon\.m2\repository
一般我們會修改本地倉庫位置,自己創建一個文件夾,在從網上下載一個擁有相對完整的所有jar包的結合,都丟到本地倉庫中,然后每次寫項目,直接從本地倉庫里拿就行了
這里面的jar包相對的完整,很多都是我們需要的。
修改本地庫位置:在$MAVEN_HOME/conf/setting.xml文件中修改
E:\AStudySoftwere\mavenrepository:就是我們自己創建的本地倉庫,將網上下載的所有jar包,jar包默認的下載存儲位置,我們就可以直接通過maven的pom.xml文件直接拿。
把jar包下載到本地的好處就是,當編譯時,會優先從本地的jar包去找,如果本地存在,就直接拿來用,如果不存在,就從Maven的中心倉庫去下載。
3.2、第三方倉庫(私服)
第三方倉庫,又稱為內部中心倉庫,也稱為私服(一種特殊的遠程倉庫,它是架設在局域網內的倉庫)。
私服:一般是由公司自己設立的,只為本公司內部共享使用。它既可以作為公司內部構件協作和存檔,也可作為公用類庫鏡像緩存,減少在外部訪問和下載的頻率。(使用私服為了減少對中央倉庫的訪問
私服可以使用的是局域網,中央倉庫必須使用外網(一般公司都會創建這種第三方倉庫,保證項目開發時,項目所需用的jar都從該倉庫中拿,每個人的版本就都一樣。)
注意:連接私服,需要單獨配置。如果沒有配置私服,默認不使用
3.3、中央倉庫
Maven內置了遠程公用倉庫:http://repo1.maven.org/maven2
這個公共倉庫是由Maven自己維護,里面有大量的常用類庫,並包含了世界上大部分流行的開源項目構件。目前是以java為主
工程依賴的jar包如果本地倉庫沒有,默認從中央倉庫下載
3.4、Maven獲取jar的過程
四、手動創建Maven項目
4.1、Maven的目錄結構
MavenProjectRoot(項目根目錄)
|----src
| |----main
| | |----java ——存放項目的.java文件
| | |----resources ——存放項目資源文件,如spring, hibernate配置文件
| |----test
| | |----java ——存放所有測試.java文件,如JUnit測試類
| | |----resources ——存放項目資源文件,如spring, hibernate配置文件
|----target ——項目輸出位置
|----pom.xml ----用於標識該項目是一個Maven項目
圖中有一個target目錄,是因為將該java項目進行了編譯,src/main/java下的源代碼就會編譯成.class文件放入target目錄中,target就是輸出目錄。
4.2、手動創建一個Maven項目
1)創建項目的根文件夾:FirstMaven
2)創建一個pom.xml文件

<?xml version="1.0" encoding="UTF-8"?> <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"> <!--所有的Maven項目都必須配置這四個配置項--> <modelVersion>4.0.0</modelVersion> <!--groupId指的是項目名的項目組,默認就是包名--> <groupId>cn.gacl.maven.hello</groupId> <!--artifactId指的是項目中的某一個模塊,默認命名方式是"項目名-模塊名"--> <artifactId>hello-first</artifactId> <!--version指的是版本,這里使用的是Maven的快照版本--> <version>SNAPSHOT-0.0.1</version> </project>
3)編寫Java類文件,Maven項目規定,所有的*.java文件必須放在src目錄下的main目錄下的java目錄中,在FirstMaven項目根目錄中創建一個src目錄,然后在src目錄中創建main目錄,在main目錄中再創建java文件夾。
4)使用Maven編譯Hello.java,首先進入到項目根目錄,然后使用命令”mvn compile”進行編譯
使用Maven編譯完成之后,在項目的根目錄會產生一個target文件夾。打開target文件夾,可以看到里面有一個classes文件夾,classes文件夾存放的就是編譯成功后生成的.class文件。
5)使用"mvn clean"命令清除編譯結果,也就是把編譯生成的target文件夾刪掉
持續更新中,覺得不錯點個“推薦”哦!