下載bin安裝包扶叉,解壓枣氧,配置環(huán)境變量
mvn命令:
mvn
-v 查看maven版本
compile 編譯
test 測試
package 打包
clean 刪除tartget
install 安裝jar包到本地倉庫中
聲明:以下筆記的內(nèi)容大部分來自于尚硅谷的maven視頻課程,花了一天的時(shí)間學(xué)習(xí)完,并做了以下筆記
1.注意:執(zhí)行與構(gòu)建過程相關(guān)的maven命令,必須進(jìn)入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.當(dāng)我們執(zhí)行的maven命令需要用到某些插件時(shí)想邦,maven核心程序會(huì)首先到本地倉庫中查找委刘。
3.本地倉庫的默認(rèn)位置:【當(dāng)前用戶home目錄】.m2\repository
4.maven 核心程序如果在本地倉庫中找不到需要的插件,那么會(huì)自動(dòng)連接外網(wǎng)往声,到中央倉庫下載。
5.如果此時(shí)無法連接外網(wǎng)且警,則構(gòu)建失敗。
6.修改默認(rèn)本地倉庫的位置可以讓maven核心程序到我們事先準(zhǔn)備好的目錄下查找插件
①找到maven解壓目錄\conf\settings.xml
②在settings.xml文件中找到localRepository標(biāo)簽
③將<localRepository>/path/to/local/repo</localRepository>從注釋中取出
④將標(biāo)簽內(nèi)容修改為已經(jīng)準(zhǔn)備好的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 項(xiàng)目對象模型
2.pom.xml對于maven工程是核心配置文件仁连,與構(gòu)建過程相關(guān)的一切配置都在這個(gè)文件中進(jìn)行配置,重要程度相當(dāng)于web.xml對于動(dòng)態(tài)web工程
坐標(biāo)
maven的坐標(biāo)
使用下面三個(gè)向量在倉庫中唯一定位一個(gè)maven工程
①groupId:公司或組織域名倒序+項(xiàng)目名
②artifactId:模塊名
③version:版本
Maven工程的坐標(biāo)與倉庫中路徑的對應(yīng)關(guān)系
倉庫
倉庫的分類
1.本地倉庫:當(dāng)前電腦部署的倉庫目錄遣钳,為當(dāng)前電腦上所有maven工程服務(wù)
2.遠(yuǎn)程倉庫:
①私服:搭建在局域網(wǎng)中環(huán)境中扰魂,為局域網(wǎng)范圍內(nèi)的所有Maven工程服務(wù)
②中央倉庫:架設(shè)在internet上,為全世界所有maven工程服務(wù)
③中央倉庫鏡像:為了分擔(dān)中央倉庫的流量蕴茴,提升用戶訪問的速度
倉庫中保存的內(nèi)容:maven工程
1.maven自身需要的插件
2.第三方架設(shè)或工具的jar包
3.我們自己開發(fā)的maven工程
依賴
①maven解析依賴信息時(shí)會(huì)到本地倉庫中查找被依賴的jar包
對于我們自己開發(fā)的maven工程劝评,使用install命令安裝后就可以進(jìn)入倉庫
②依賴的范圍
1.compile
- 對主程序是否有效:有效
- 對測試程序是否有效:有效
- 是否參與打包:參與
- 是否參與部署:參與
典型例子:spring-core
2.test - 對主程序是否有效:無效
- 對測試程序是否有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
典型例子:junit
3.provided范圍依賴 - 對主程序是否有效:有效
- 對測試程序是否有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
典型例子:servlet-api.jar - 典型例子:servlet-api.jar
生命周期
1.各個(gè)構(gòu)建環(huán)節(jié)執(zhí)行的順序:不能打亂順序,必須按照規(guī)定的正確順序來執(zhí)行
2.maven核心程序中定義了抽象的生命周期倦淀,生命周期中各個(gè)階段的具體任務(wù)是由插件來完成的
3.maven核心程序?yàn)榱烁玫膶?shí)現(xiàn)自動(dòng)化構(gòu)建蒋畜,按照這樣的特點(diǎn)執(zhí)行生命周期中的各個(gè)階段:不論現(xiàn)在要執(zhí)行生命周期的哪一個(gè)階段,都是從這個(gè)生命周期最初的位置開始執(zhí)行
插件和目標(biāo)
1.生命周期的各個(gè)階段僅僅定義了要執(zhí)行的任務(wù)是什么
2.各個(gè)階段和插件的目標(biāo)是對應(yīng)的
3.相似的目標(biāo)由特定的插件來完成
4.可以將插件目標(biāo)看做“調(diào)用插件功能的命令”
在eclipse中使用maven
①maven插件:eclipse內(nèi)置
②maven插件的設(shè)置
1.installations:指定Maven核心程序的位置撞叽,不建議使用插件自帶的maven程序姻成,而應(yīng)該使用我們自己解壓的那個(gè)
2.user settings:指定解壓目錄中的conf/settings.xml的位置,進(jìn)而獲取本地倉庫的位置
③基本操作
1.創(chuàng)建maven版的java工程
2.創(chuàng)建maven版的web工程
3.執(zhí)行maven命令
設(shè)置eclipse中創(chuàng)建maven工程默認(rèn)的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工程,會(huì)默認(rèn)是java SE1.5的環(huán)境糠雨,修改了后就會(huì)自動(dòng)生成相應(yīng)的版本
創(chuàng)建maven工程時(shí)一定要勾選create simple maven project(skip ...)
不然創(chuàng)建quickstart的項(xiàng)目時(shí)會(huì)發(fā)現(xiàn)源碼包包含的路徑不全
在eclipse中執(zhí)行maven命令才睹,直接右鍵pom.xml,run as...
如果需要執(zhí)行編譯甘邀,選擇mvn build ...
如果在myeclipse中執(zhí)行maven命令時(shí)候琅攘,控制臺(tái)不輸出任何日志提示信息,添加一下myeclipse的設(shè)置松邪,windows->Java->Installed JREs坞琴,選擇使用的jdk,edit編輯测摔,在默認(rèn)虛擬機(jī)參數(shù)中添加-Dmaven.multiModuleProjectDirectory=$M2_HOME參數(shù)
創(chuàng)建java工程packaging選擇jar置济,創(chuàng)建web工程packaging選擇war,如果不是myeclipse锋八,而是eclipse浙于,他創(chuàng)建web工程只會(huì)生成一個(gè)webapps,這時(shí)右鍵項(xiàng)目properties挟纱,project facets,取消Dynamic Web Module的勾選應(yīng)用羞酗,然后再勾選上應(yīng)用OK。然后對話框下方會(huì)提示進(jìn)一步配置參數(shù)紊服,點(diǎn)擊它檀轨,將content directory改成src/main/webapp
myeclipse中創(chuàng)建maven工程的正確打開姿勢
依賴【高級(jí)】
①依賴的傳遞性
1.好處:可以傳遞的依賴不必在每個(gè)模塊工程中都重復(fù)聲明胸竞,在“最下面”的工程之后依賴一次即可。
2.注意:非compile范圍的依賴不能依賴参萄,所以在各個(gè)版本工程模塊中卫枝,如果有需要就得重復(fù)聲明依賴
②依賴的排除
1.需要設(shè)置依賴排除的場合
2.依賴排除的設(shè)置方式
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
③依賴的原則
1.作用:解決模塊工程之間的jar包沖突問題
2.情景設(shè)定1:驗(yàn)證路徑最短者優(yōu)先原則
3.情景設(shè)定2:驗(yàn)證路徑相同時(shí)先聲明者優(yōu)先
先聲明指的是dependency標(biāo)簽的聲明順序
4.同意管理依賴的版本
(1)情景舉例:比如引入spring4.0.0版本的,那么spring相關(guān)的依賴包都用4.0.0版本的
如果需要統(tǒng)一升為4.1.1讹挎,怎么辦校赤?手動(dòng)逐一修改不可靠
(2)建議配置方式
i.使用properties標(biāo)簽內(nèi)使用自定義標(biāo)簽統(tǒng)一聲明版本號(hào)
ii.在需要統(tǒng)一版本的位置,使用$(自定義標(biāo)簽名)引用聲明的版本號(hào)
(3)其實(shí)properties標(biāo)簽配合自定義標(biāo)簽聲明數(shù)據(jù)的配置并不是只能用于聲明依賴的版本號(hào)筒溃。凡是需要統(tǒng)一聲明后引用的場合都可以马篮。
繼承
①現(xiàn)狀
Hello依賴的junit:4.0
HelloFriend依賴的junit:4.0
MakeFriends依賴的junit:4.9
由于test范圍的依賴不能傳遞,所以必然會(huì)分散在各個(gè)模塊工程中怜奖,很容易造成版本不一致
②需求:統(tǒng)一管理各個(gè)模塊工程中對junit依賴的版本
③解決思路:將junit依賴版本統(tǒng)一提取到“父”工程中浑测,在子工程中聲明junit依賴時(shí)不指定版本,以父工程中統(tǒng)一設(shè)定的為準(zhǔn)歪玲,同時(shí)也便于修改
④操作步驟
1.創(chuàng)建一個(gè)maven工程為父工程迁央,注意:打包方式pom
2.在子工程中聲明對父工程的引用
3.將子工程的坐標(biāo)中與父工程坐標(biāo)中重復(fù)的內(nèi)容刪除
4.在父工程中統(tǒng)一管理junit的依賴
5.在子工程中刪除junit的版本號(hào)依賴
⑤注意:配置繼承后,執(zhí)行安裝命令時(shí)要先安裝父工程
聚合
①作用:一鍵安裝各個(gè)模塊工程
②配置方式:在一個(gè)總的聚合工程中配置各個(gè)參與聚合的模塊
③使用方式:在聚合工程的pom.xml上右鍵->run as->maven install