maven study

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


勾選.png

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


quickstart

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


compile.png

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


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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容