下載bin安裝包,解壓,配置環(huán)境變量
mvn命令:
mvn
-v 查看maven版本
compile 編譯
test 測試
package 打包
clean 刪除tartget
install 安裝jar包到本地倉庫中
聲明:以下筆記的內(nèi)容大部分來自于尚硅谷的maven視頻課程,花了一天的時間學習完,并做了以下筆記
1.注意:執(zhí)行與構(gòu)建過程相關(guān)的maven命令,必須進入pom.xml所在的目錄。
與構(gòu)建過程相關(guān):編譯、測試、打包...
2.常用命令
mvn clean 清理
mvn compile 編譯主程序
mvn test-compile 編譯測試程序
mvn test 執(zhí)行測試
mvn package 打包
關(guān)于聯(lián)網(wǎng)的問題
1.maven的核心程序中僅僅定義了抽象的生命周期,但是具體的工作由特定的插件來完成。而插件的本身并不包含在maven的核心程序中。
2.當我們執(zhí)行的maven命令需要用到某些插件時,maven核心程序會首先到本地倉庫中查找。
3.本地倉庫的默認位置:【當前用戶home目錄】.m2\repository
4.maven 核心程序如果在本地倉庫中找不到需要的插件,那么會自動連接外網(wǎng),到中央倉庫下載。
5.如果此時無法連接外網(wǎng),則構(gòu)建失敗。
6.修改默認本地倉庫的位置可以讓maven核心程序到我們事先準備好的目錄下查找插件
①找到maven解壓目錄\conf\settings.xml
②在settings.xml文件中找到localRepository標簽
③將<localRepository>/path/to/local/repo</localRepository>從注釋中取出
④將標簽內(nèi)容修改為已經(jīng)準備好的maven倉庫目錄
<localRepository>D:/RepoMaven</localRepository>
maven源設(shè)置為國內(nèi)源
<!-- 阿里云倉庫 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
POM
1.含義:Project Object Model 項目對象模型
2.pom.xml對于maven工程是核心配置文件,與構(gòu)建過程相關(guān)的一切配置都在這個文件中進行配置,重要程度相當于web.xml對于動態(tài)web工程
坐標
maven的坐標
使用下面三個向量在倉庫中唯一定位一個maven工程
①groupId:公司或組織域名倒序+項目名
②artifactId:模塊名
③version:版本
Maven工程的坐標與倉庫中路徑的對應(yīng)關(guān)系
倉庫
倉庫的分類
1.本地倉庫:當前電腦部署的倉庫目錄,為當前電腦上所有maven工程服務(wù)
2.遠程倉庫:
①私服:搭建在局域網(wǎng)中環(huán)境中,為局域網(wǎng)范圍內(nèi)的所有Maven工程服務(wù)
②中央倉庫:架設(shè)在internet上,為全世界所有maven工程服務(wù)
③中央倉庫鏡像:為了分擔中央倉庫的流量,提升用戶訪問的速度
倉庫中保存的內(nèi)容:maven工程
1.maven自身需要的插件
2.第三方架設(shè)或工具的jar包
3.我們自己開發(fā)的maven工程
依賴
①maven解析依賴信息時會到本地倉庫中查找被依賴的jar包
對于我們自己開發(fā)的maven工程,使用install命令安裝后就可以進入倉庫
②依賴的范圍
1.compile
- 對主程序是否有效:有效
- 對測試程序是否有效:有效
- 是否參與打包:參與
- 是否參與部署:參與
典型例子:spring-core
2.test - 對主程序是否有效:無效
- 對測試程序是否有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
典型例子:junit
3.provided范圍依賴 - 對主程序是否有效:有效
- 對測試程序是否有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
典型例子:servlet-api.jar - 典型例子:servlet-api.jar
生命周期
1.各個構(gòu)建環(huán)節(jié)執(zhí)行的順序:不能打亂順序,必須按照規(guī)定的正確順序來執(zhí)行
2.maven核心程序中定義了抽象的生命周期,生命周期中各個階段的具體任務(wù)是由插件來完成的
3.maven核心程序為了更好的實現(xiàn)自動化構(gòu)建,按照這樣的特點執(zhí)行生命周期中的各個階段:不論現(xiàn)在要執(zhí)行生命周期的哪一個階段,都是從這個生命周期最初的位置開始執(zhí)行
插件和目標
1.生命周期的各個階段僅僅定義了要執(zhí)行的任務(wù)是什么
2.各個階段和插件的目標是對應(yīng)的
3.相似的目標由特定的插件來完成
4.可以將插件目標看做“調(diào)用插件功能的命令”
在eclipse中使用maven
①maven插件:eclipse內(nèi)置
②maven插件的設(shè)置
1.installations:指定Maven核心程序的位置,不建議使用插件自帶的maven程序,而應(yīng)該使用我們自己解壓的那個
2.user settings:指定解壓目錄中的conf/settings.xml的位置,進而獲取本地倉庫的位置
③基本操作
1.創(chuàng)建maven版的java工程
2.創(chuàng)建maven版的web工程
3.執(zhí)行maven命令
設(shè)置eclipse中創(chuàng)建maven工程默認的jdk版本,conf/settings.xml中打開注釋并修改版本
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
如果不該上面的配置,創(chuàng)建maven java工程,會默認是java SE1.5的環(huán)境,修改了后就會自動生成相應(yīng)的版本
創(chuàng)建maven工程時一定要勾選create simple maven project(skip ...)

不然創(chuàng)建quickstart的項目時會發(fā)現(xiàn)源碼包包含的路徑不全

在eclipse中執(zhí)行maven命令,直接右鍵pom.xml,run as...
如果需要執(zhí)行編譯,選擇mvn build ...

如果在myeclipse中執(zhí)行maven命令時候,控制臺不輸出任何日志提示信息,添加一下myeclipse的設(shè)置,windows->Java->Installed JREs,選擇使用的jdk,edit編輯,在默認虛擬機參數(shù)中添加-Dmaven.multiModuleProjectDirectory=$M2_HOME參數(shù)

創(chuàng)建java工程packaging選擇jar,創(chuàng)建web工程packaging選擇war,如果不是myeclipse,而是eclipse,他創(chuàng)建web工程只會生成一個webapps,這時右鍵項目properties,project facets,取消Dynamic Web Module的勾選應(yīng)用,然后再勾選上應(yīng)用OK。然后對話框下方會提示進一步配置參數(shù),點擊它,將content directory改成src/main/webapp
myeclipse中創(chuàng)建maven工程的正確打開姿勢
依賴【高級】
①依賴的傳遞性
1.好處:可以傳遞的依賴不必在每個模塊工程中都重復(fù)聲明,在“最下面”的工程之后依賴一次即可。
2.注意:非compile范圍的依賴不能依賴,所以在各個版本工程模塊中,如果有需要就得重復(fù)聲明依賴
②依賴的排除
1.需要設(shè)置依賴排除的場合
2.依賴排除的設(shè)置方式
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
③依賴的原則
1.作用:解決模塊工程之間的jar包沖突問題
2.情景設(shè)定1:驗證路徑最短者優(yōu)先原則
3.情景設(shè)定2:驗證路徑相同時先聲明者優(yōu)先
先聲明指的是dependency標簽的聲明順序
4.同意管理依賴的版本
(1)情景舉例:比如引入spring4.0.0版本的,那么spring相關(guān)的依賴包都用4.0.0版本的
如果需要統(tǒng)一升為4.1.1,怎么辦?手動逐一修改不可靠
(2)建議配置方式
i.使用properties標簽內(nèi)使用自定義標簽統(tǒng)一聲明版本號
ii.在需要統(tǒng)一版本的位置,使用$(自定義標簽名)引用聲明的版本號
(3)其實properties標簽配合自定義標簽聲明數(shù)據(jù)的配置并不是只能用于聲明依賴的版本號。凡是需要統(tǒng)一聲明后引用的場合都可以。
繼承
①現(xiàn)狀
Hello依賴的junit:4.0
HelloFriend依賴的junit:4.0
MakeFriends依賴的junit:4.9
由于test范圍的依賴不能傳遞,所以必然會分散在各個模塊工程中,很容易造成版本不一致
②需求:統(tǒng)一管理各個模塊工程中對junit依賴的版本
③解決思路:將junit依賴版本統(tǒng)一提取到“父”工程中,在子工程中聲明junit依賴時不指定版本,以父工程中統(tǒng)一設(shè)定的為準,同時也便于修改
④操作步驟
1.創(chuàng)建一個maven工程為父工程,注意:打包方式pom
2.在子工程中聲明對父工程的引用
3.將子工程的坐標中與父工程坐標中重復(fù)的內(nèi)容刪除
4.在父工程中統(tǒng)一管理junit的依賴
5.在子工程中刪除junit的版本號依賴
⑤注意:配置繼承后,執(zhí)行安裝命令時要先安裝父工程
聚合
①作用:一鍵安裝各個模塊工程
②配置方式:在一個總的聚合工程中配置各個參與聚合的模塊
③使用方式:在聚合工程的pom.xml上右鍵->run as->maven install