maven study

下載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 ...)


勾選.png

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


quickstart

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


compile.png

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


設(shè)置虛擬機(jī)參數(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工程的正確打開姿勢

相關(guān)博客
官方教程
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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末读慎,一起剝皮案震驚了整個(gè)濱河市漱贱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夭委,老刑警劉巖幅狮,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異株灸,居然都是意外死亡崇摄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門慌烧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逐抑,“玉大人,你說我怎么就攤上這事屹蚊〔薨保” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵汹粤,是天一觀的道長命斧。 經(jīng)常有香客問我,道長嘱兼,這世上最難降的妖魔是什么国葬? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上汇四,老公的妹妹穿的比我還像新娘接奈。我一直安慰自己,他們只是感情好通孽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布序宦。 她就那樣靜靜地躺著,像睡著了一般利虫。 火紅的嫁衣襯著肌膚如雪挨厚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天糠惫,我揣著相機(jī)與錄音,去河邊找鬼钉疫。 笑死硼讽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牲阁。 我是一名探鬼主播固阁,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼城菊!你這毒婦竟也來了备燃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤凌唬,失蹤者是張志新(化名)和其女友劉穎并齐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體客税,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡况褪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了更耻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片测垛。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秧均,靈堂內(nèi)的尸體忽然破棺而出食侮,到底是詐尸還是另有隱情,我是刑警寧澤目胡,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布锯七,位于F島的核電站,受9級(jí)特大地震影響讶隐,放射性物質(zhì)發(fā)生泄漏起胰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望效五。 院中可真熱鬧地消,春花似錦、人聲如沸畏妖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戒劫。三九已至半夷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迅细,已是汗流浹背巫橄。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茵典,地道東北人湘换。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像统阿,于是被迫代替她去往敵國和親彩倚。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理扶平,服務(wù)發(fā)現(xiàn)帆离,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,806評論 6 342
  • 簡介 概述 Maven 是一個(gè)項(xiàng)目管理和整合工具 Maven 為開發(fā)者提供了一套完整的構(gòu)建生命周期框架 Maven...
    閩越布衣閱讀 4,288評論 6 39
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,079評論 25 707
  • 1.call和ret指令都是轉(zhuǎn)移指令结澄,它們都修改IP的值哥谷,或同時(shí)修改CS和IP的值。它們經(jīng)常共同用語實(shí)現(xiàn)子程序的設(shè)...
    nalis風(fēng)閱讀 5,591評論 0 0