Maven学习文档常用命令继承聚合
學習視頻
www.atguigu.com
目前的技術在開發中存在的問題
如果項目非常龐大,就不適合繼續使用package來劃分模塊。最好是每一個模塊對應一 個工程,利于分工協作。
借助于Maven就可以將一個項目拆分成多個工程。
帶來的問題是:同樣的jar包文件重復出現在不同的項目工程中,一方 面浪費存儲空間,外也讓工程比較臃腫。
借助Maven ,可以將jar包僅僅保存在“倉庫”中,有需要使用的工程”引用”這個文件接口,不需要真的把jar包復制過來。
不同技術的官網提供jar包下載的形式是五花八門的。
有些技術的官網就是通過Maven或SVN等專門】的工具來提供下載的。
如果是以不規范的方式下載的jar包,那么其中的內容很可能也是不規范的。
借助于Maven可以以一種規范的方式下載jar包。因為所有知名框架或第三方工具的jar包以及按照統一的規范存放在了Maven的中央倉庫中。以規范的方式下載的jar包,內容也是可靠的。
Tips:”統一的規范” 不僅是對IT開發領域非常重要,對于整個人類社會都是非常重要的。
FileUpload組件一 +IO組件。 commons一fileupload一1.3.jar依賴于commons一io一2.0.1.jar。
如果所有jar包之間的依賴關系都需要程序員自己非常清楚的了解,那么就會極大的增加學習成本。
Maven會自動將被依賴的jar包導入進來。
Maven 是什么
Maven是一款服務 于Java平臺的自動化構建工具。Make一 +Ant一→Maven一→Gradle
妹文、文
構建
概念:以"Java源文件”、”框架配置文件”、 "JSP” 、"HTML” 、”圖片” 等資源為“原材料”, 去"生產”一個可以運行的項目的過程。;編譯
■部署
■搭建
編譯: Java源文件【Userjava】一→編譯一→Class字節碼文件【User.class】一 +交給JVM去執行
部署:一個BS項目最終運行的并不是動態Web工程本身,而是這個動態Web工程"編譯的結果”
生的雞一處理一→熟的雞
動態Web工程一→編譯、部署一→編譯結果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gZC3el1K-1590504002622)(自動化構建工具:Maven.assets/image-20200526203644062.png)]
開發過程中,所有的路徑或配置文件中配置的類路徑等都是以編譯結果的目錄結構為標準。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-whxO473i-1590504002623)(自動化構建工具:Maven.assets/image-20200526203822823.png)]
構建過程中的各個環節
【1】清理:將以前編譯得到的舊的class字節碼文件刪除,為下一次編譯做準備
【2】編譯:將Java源程序編程成class字節碼文件
【3】測試:自動測試,自動調用junit程序
【4】報告:測試程序執行的結果
【5】打包:動態Web_ I程打war包, Java工程打jar包
【6】安裝: Maven特定的概念一將打包得到的文件復制到 “倉庫”中的指定位置
【7】部署:將動態Web工程生成的war包復制到Servlet容器的指定目錄下,使其可以運行
自動化構建
安裝Maven 核心程序
解壓到你想安裝的目錄即可
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-A2ubUmuR-1590504002624)(自動化構建工具:Maven.assets/image-20200526204100798.png)]
配置環境變量(方便我們日常使用)
-
注意:maven是java編寫的所以需要先配置好JAVA_HOME
-
windows配置方式
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kQfnHtn7-1590504002626)(自動化構建工具:Maven.assets/image-20200526204143072.png)]
-
Linux 配置方式(mac 為例)
$ vim /etc/profile # 添加下面的內容到文件中# 添加maven的配置(下面的路徑是你maven的安裝目錄)export M2_HOME=/opt/module/maven-3.6.3export MAVEN_HOME=/opt/module/maven-3.6.3 # 這個可以不寫,沒啥意義export PATH=$MAVEN_HOME/bin:$M2_HOME/bin:$PATH# 重新加載配置文件 $ source /etc/profile
修改maven 的settings.xml
- 配置了國內鏡像和默認使用jdk8編譯
Maven 核心概念
Maven 目錄結構
創建約定的目錄結構
【1】根目錄:工程名
【2】src目錄:源碼.
【3】pom.xml文件: MavenI程的核心配置文件
【4】main目錄:存放主程序
【5】test目錄:存放測試程序;
【6】java目錄:存放Java源文件
【7】resources目錄:存放框架或其他工具的配置文件
為什么要遵守約定的目錄結構呢?
-
Maven要負責我們這個項目的自動化構建,以編譯為例, Maven要想自動進行編譯,那么它必須知道Java源文件保存在哪里。
-
如果我們自己自定義的東西想要讓框架或工具知道,有兩種辦法
-
以配置的方式明確告訴框架
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-liaIXQ5C-1590504002627)(自動化構建工具:Maven.assets/image-20200526205334667.png)]
-
遵守框架內部已經存在的約定
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uZwSxpQG-1590504002627)(自動化構建工具:Maven.assets/image-20200526205348357.png)]
-
約定 > 配置 > 編碼
-
maven 的 java 的目錄結構
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7xxopKIJ-1590504002628)(自動化構建工具:Maven.assets/image-20200526205511499.png)]
maven 的 web 項目的目錄結構
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iYNnYMyL-1590504002629)(自動化構建工具:Maven.assets/image-20200526205725303.png)]
Maven 常用命令
注意:執行與構建過程相關的Maven命令,必須進入pom.xml所在的目錄。與構建過程相關:編譯、測試、打包、…
常用命令
【1】mvn clean :清理
【2】mvn compile :編譯主程序
【3】mvn test一compile :編譯測試程序
【4】mvn test :執行測試
【5】mvn package :打包
【6】mvn install :安裝
【7】mvn site :生成站點
導入自己的jar到maven 倉庫中(不常用)
# Dfile 你要導入jar的全路徑 # DgroupId 一般是公司域名反寫 + [ 項目名 ] # DartifactId 模塊名 或者 項目名 # Dversion 版本 # Dpackaging 類型 $ mvn install:install-file -Dfile="C:\Users\Administrator\Desktop\OrgPublic.jar" -DgroupId=myjar -DartifactId=OrgPublic -Dversion=1.0 -Dpackaging=jarMaven 下載jar的過程
Maven的核心程序中僅僅定義了抽象的生命周期,但是具體的工作必須由特定的插件來完成。而插件本身并不包含在Maven的核心程序中。
當我們執行的Maven命令需要用到某些插件時,Maven核心程序會首先到本地倉庫中查找。
本地倉庫的默認位置: 【系統中當前用戶的家目錄】.m2\repository
Maven核心程序如果在本地倉庫中找不到需要的插件,那么它會自動連接外網,到中央倉庫下載。
如果此時無法連接外網,則構建失敗。
修改默認本地倉庫的位置可以讓Maven核心程序到我們事先準備好的目錄下查找插件
【1】找到Maven解壓目錄\conf\settings.xml
【2】在settings.xml文件中找到localRepository標簽
【3】將《localRepository》 /path/to/local/repo《/localRepository》從注釋中取出
【4】將標簽體內容修改為已經準備好的Maven倉庫目錄
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9E1ouCrS-1590504002629)(自動化構建工具:Maven.assets/image-20200526210409210.png)]
POM 是什么意思
含義: Project Object Model項目對象模型
DOM Document Object Model文檔對象模型
pom.xml對于Maven工程是核心配置文件,與構建過程相關的一切設置都在這個文件中進行配置。重要程度相當于web.xml對于動態Web工程
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DQezguMF-1590504002630)(自動化構建工具:Maven.assets/image-20200526210530380.png)]
Maven工程坐標與倉庫中路徑的對應關系
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WUAr3IVL-1590504002630)(自動化構建工具:Maven.assets/image-20200526210602685.png)]
倉庫
倉庫的分類
本地倉庫:當前電腦上部署的倉庫目錄,為當前電腦上所有Maven工程服務
遠程倉庫
- 私服:搭建在局域網環境中,為局域網范圍內的所有Maven工程服務
- 中央倉庫:架設在Internet上,為全世界所有Maven.工程服務
- 中央倉庫鏡像:為了分擔中央倉庫的流量,提升用戶訪問速度
倉庫中保存的內容: Maven工程
【1】Maven自身所需要的插件
【2】第三方框架或工具的jar包
【3】我們自己開發的Maven工程
初步認識依賴
Maven解析依賴信息時會到本地倉庫中查找被依賴的jar包。
對于我們自己開發的Maven工程,使用mvn install命令安裝后就可以進入倉庫。
依賴的范圍
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Cba5MnqJ-1590504002631)(自動化構建工具:Maven.assets/image-20200526211003404.png)]
compile范圍依賴
- 對主程序是否有效:有效
- 對測試程序是否有效:有效
- 否參與打包:參與.
- 是否參與部署:參與
- 典型例子: spring一core
test范圍依賴
- 對主程序是否有效:無效
- 對測試程序是否有效:有效
- 否參與打包:不參與
- 是否參與部署:不參與
- 典型例子: junit
provided范圍依賴
-
對主程序是否有效:有效=對測試程序是否有效:有效
-
是否參與打包:不參與
-
是否參與部署:不參與
-
典型例子: servlet一apijar
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MT0cuDze-1590504002632)(自動化構建工具:Maven.assets/image-20200526211149958.png)]
生命周期
各個構建環節執行的順序:不能打亂順序,必須按照既定的正確順序來執行。
Maven的核心程序中定義了抽象的生命周期,生命周期中各個階段的具體任務是由插件來完成的。
Maven核心程序為了更好的實現自動化構建, 按照這一的特點執行生命周期中的各個階段:不論現在要執行生命周期中的哪一個階段,都是從這個生命周期最初的位開始執行。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8xlCj3Dw-1590504002632)(自動化構建工具:Maven.assets/image-20200526211251863.png)]
插件和目標
| compile | compile | maven-compiler-plugin |
| test-compile | testCompile | maven-compiler-plugin |
在IDEA 中使用Maven
打開IDEA點擊設置選項
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ENSJGiQS-1590504002633)(自動化構建工具:Maven.assets/image-20200526212804436.png)]
設置maven的家目錄
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NLbe5tLH-1590504002634)(自動化構建工具:Maven.assets/image-20200526213016881.png)]
最好這么設置一下
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NPf4Puwt-1590504002635)(自動化構建工具:Maven.assets/image-20200526213216730.png)]
依賴的高級
依賴的傳遞性
? [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Wv8Bnspn-1590504002635)(自動化構建工具:Maven.assets/image-20200526213617463.png)]
依賴的排除
需要設置依賴排除的場合
- server-api.jar 和 工作流的jar 起沖突,導致無法使用jstl。
依賴排除的設置方式
<!-- 工作流 --> <dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>6.0.0</version><exclusions><!-- 排除juel-spi,會和tomcat下的servlet、jsp等jar有沖突 --><exclusion><groupId>de.odysseus.juel</groupId><artifactId>juel-spi</artifactId></exclusion></exclusions> </dependency>依賴的原則(了解即可)
作用:解決模塊工程之間的jar包沖突問題
情景設定1:驗證路徑最短者優先原則
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nDFmjFYy-1590504002636)(自動化構建工具:Maven.assets/image-20200526214123240.png)]
情景設定2:驗證路徑相同時先聲明者優先
- 向聲明指dependecy 標簽的聲明順序
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5lsNMDYM-1590504002637)(自動化構建工具:Maven.assets/image-20200526214137361.png)]
統一管理依賴的版本(常用)
情景:spring相關的jar都是一樣的版本。我們能不能設置一個變量,直接使用變量指定版本號。方便我們替換spring 的版本。
實操:
<!-- 這個標簽可以定義很多的變量 --><properties><!-- 變量名 spring.version 變量值 4.3.10.RELEASE --><spring.version>4.3.10.RELEASE</spring.version></properties><dependencies><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><!-- 使用方式使用 類似EL 的方式獲取 --><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><!-- 如果不想使用統一的版本,直接寫就行了,直接不用 --><version>4.3.10.RELEASE</version></dependency></dependencies>繼承
現狀
Hello依賴的junit : 4.0
HelloFriend依賴的junit : 4.0
MakeFriends依賴的junit : 4.9
由于test范圍的依賴不能傳遞,所以必然會分散在各個模塊工程中,很容易造成版本不一致。
需求:統一管理各個模塊工程中對junit依賴的版本
解決思路:將junit依賴統一提取到"父”工程中,在子工程中聲明junit依賴時不指定版本,以父工程中統一設定的為準。 同時也便于修改。
操作步驟
創建一個maven項目
選中這個maven項目,點擊右鍵創建子模塊,idea會自動幫我們設置好maven的父子依賴結構。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ealhlXPg-1590504002637)(自動化構建工具:Maven.assets/image-20200526215546222.png)]
在父工程中同一管理依賴
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GOnE82rQ-1590504002638)(自動化構建工具:Maven.assets/image-20200526215405144.png)]
聚合
作用:[一鍵編譯 | 打包 | 安裝]各個模塊工程
配置方式:在一個“總的聚合工程”中配置各個參與聚合的模塊
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ylh1S0kL-1590504002639)(自動化構建工具:Maven.assets/image-20200526215857668.png)]
使用方式:在聚合工程的pom.xml 上執行maven的命令
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bGJbs0iq-1590504002639)(自動化構建工具:Maven.assets/image-20200526215959825.png)]
總結
以上是生活随笔為你收集整理的Maven学习文档常用命令继承聚合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11——右值引用
- 下一篇: NVIDIA显卡硬编码调研