一、建構
(1)、純Java代碼:編譯
(2)、Web工程:編譯和部署(把編譯的結果“拿”到伺服器指定的目錄)
Web工程與起編譯結果的目錄:
建構就是以我們編寫的Java代碼、架構配置檔案、國際化等其他資源檔案、JSP頁面和圖檔等靜态資源作為“原材料”,去“生産”出一個可以運作的項目的過程
建構過程中的各個環節
- 清理:将以前編譯得到的舊的位元組碼檔案删除,為下一次編譯做準備
- 編譯:将Java源程式編譯成Class位元組碼檔案
- 測試:自動測試(讓maven自動調用測試程式),自動調用junit程式
- 報告:測試程式執行的結果
- 打包:動态Web工程打war包,Java工程打jar包
- 安裝:Maven特定的概念————将打包得到的檔案複制到“倉庫”中的指定位置
- 部署:将動态Web工程生成的war包複制到Servlet容器的指定目錄下,使其可以運作
自動化的建構
自動化建構好處:![]()
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目
二、Maven得核心概念
- 約定的目錄結構
- POM
- 坐标
- 依賴
- 倉庫
- 生命周期/插件/目标
- 繼承
- 聚合
三、第一個Maven工程
- 約定的目錄結構
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 為什麼遵守約定得目錄結構
- Maven要想自動得進行編譯,那麼它必須知道Java源檔案儲存在哪兒
- 如何讓架構或工具知道我們自定義的東西
-
以配置的方式明确告訴架構
-spring的< param-value >配置屬性
- 遵守架構内部存在的約定
- log4j.xml
- log4j.properties
- 約定>配置>編碼
-
二、常見的Maven指令
- 注意:執行與建構過程相關的Maven指令,必須進入pom.xml所在目錄。
- 與建構過程相關:編譯、測試、打包
- 常用指令
- mvn clean:清理
- mvn compile:編譯主程式
- mvn test-compile:編譯測試程式
- mvn test:執行測試
- mvn package:打包
三、關于聯網的問題
- Maven的核心程式中僅僅定義了抽象的生命周期,但是具體的工作必須由特定的插件來完成。而插件本身并不包含在Maven的核心程式中
- 當我們執行Maven指令需要用到的某些插件時,Maven核心程式會首先到本地倉庫去查找
- 本地倉庫的預設位置:[ 系統目前使用者家目錄 ]\.m2\repository
- Maven核心程式如果在本地找不到需要的插件,那麼會自動連接配接外網到外網倉庫進行下載下傳
- 可修改預設的本地倉庫
- Maven安裝目錄\conf\setting.xml
- 在setting.xml檔案中找到localRepository标簽,并将其從注釋中取出
- 修改标簽體為已經準備好的本地倉庫目錄
四、POM
- 含義:Project Object Model 項目對象模型
- pom.xml對于Maven工程是核心的配置檔案,與建構過程相關的一切設定都在這個檔案中進行配置
五、坐标
- 數學中的坐标:
- 在平面上,使用X、Y兩個向量可以唯一的定位平面中的任何一個點
- 在空間中,是同X、Y、Z三個向量可以唯一的定位空間中的任何一個點
- Maven的坐标
- 使用下面三個向量在倉庫中國唯一定位一個Maven工程
- groupid:公司或組織域名倒序+項目名
- artifactid:子產品名
- version:版本
- 使用下面三個向量在倉庫中國唯一定位一個Maven工程
- Maven工程的坐标與倉庫中路徑的對應關系
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目
六、倉庫
- 倉庫的分類:
- 本地長褲:目前電腦上部署的倉庫目錄,為目前電腦上所有Maven工程服務
- 遠端倉庫
- 私服:搭建在區域網路環境下,為區域網路範圍内所有的Maven工程服務
- 中央倉庫:架設在Internet上,為全世界所有Maven工程服務
- 中央倉庫鏡像:為了分擔中央倉庫的流量
- 倉庫中儲存的内容:Maven工程
- Maven自身所需要的插件
- 第三方架構或工具的jar包
- 我們自己開發的Maven工程
七、依賴[初步]
- Maven解析依賴資訊時會到本地倉庫中查找被依賴的jar包
- 對于我們自己開發的工程,使用install指令安裝後就可以進入倉庫
- 依賴的範圍:(使用scope标簽包圍)
- compile(預設)
- 對主程式是否有效:有效
- 對測試程式是否有效:有效
- 是否參與打包:參與
- test
- 對主程式是否有效:無效
- 對測試程式是否有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
- 典型例子:junit
- provided
- 對主程式是否有效:無效
- 對測試程式是否有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
- 典型例子:servlet-api.jar
- compile(預設)
八、生命周期
- 各個建構環節執行的順序:不能打亂順序,必須按照既定的正确順序來執行
- Maven的核心程式中定義了抽象的生命周期,生命周期中各個階段的具體任務是由插件完成的
- Clean Lifecycle
- Default Lifecycle
- Site Lifecycle
- Maven核心程式為了更好的實作自動化建構,按照這一特點執行生命周期的各個階段:不論現在要執行生命周期的哪一個階段,都是從這個生命周期最初的位置開始執行的
- compiel
- test
- package
- 插件和目标
- 生命周期的各個階段僅僅定義了要執行的任務是什麼
- 各個階段和插件的目标是對應的
- 相識的目标由特定的插件來完成
![]()
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目
插件目标相當于調用插件的指令
九、使用Maven
- Maven插件
- Maven插件的設定
- installations:指定Maven核心程式的位置
- user setting:指定conf/settings.xml的位置,進而擷取本地倉庫的位置
- 基本操作
- 建立Maven版Java工程
- 建立Maven版Web工程
- 執行Maven指令:右鍵pom.xml–>Run As
注意使用provided為依賴的jar包一定不要使用compile為依賴,否則可能出現嚴重的問題
例子:jsp-api
IDEA工程通過一些setting檔案來識别工程
Maven通過pom.xml來識别工程
十、依賴[進階]
- 依賴的傳遞性
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目
- 好處:可以傳遞不必再每個工程都重複聲明,在“最下面”的工程中依賴一次即可
- 注意:非compile的依賴不能傳遞。是以在各個工程中,如果有需要就得重複聲明依賴
- 依賴的排除
- 需要設定依賴排除的場合
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 依賴排除的設定方式
- 配置exclusions标簽裡面的exclusion,寫入坐标
- 依賴的原則
- 作用:解決子產品工程之間的jar包沖突問題
- 情景設定1:驗證路徑最短優先者的原則
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 情景設定2:驗證路徑相同時先聲明者優先(指的是在pom.xml中的位置)
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目
- 需要設定依賴排除的場合
十一、統一管理依賴版本
- 情景舉例
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目
這裡對Spring各個jar包的依賴都是4.0.0
如果要統一更新到4.1.1,怎麼辦?手動逐一修改不可靠
- 建議配置方式
- 使用properties标簽内使用自定義标簽統一聲明版本号
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 在需要統一版本的位置,使用${自定義标簽}引用聲明的版本号
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目
- 使用properties标簽内使用自定義标簽統一聲明版本号
- 其實properties标簽配合自定義标簽聲明資料的配置并不是隻能用于聲明依賴的版本号。凡是需要統一聲明後再引用的場合都可以用
十二、繼承
-
現狀
Hello依賴junit:4.0
HelloFriend依賴的junit:4.0
MakeFriends依賴的junit:4.9
由于test範圍的依賴不能傳遞,是以必然會分散在各個工程中,很容易導緻版本不一緻
- 要求:統一管理各個子產品工程中對junit依賴的版本
- 解決思路:将junit依賴統一提取到"父"工程中,在字工程中聲明時不指定版本,以父工程中統一設定的為準,同時也便于修改。
- 操作步驟
- 建立一個Maven工程作為父工程。注意:打包方式是pom
- 在子工程中聲明對父工程的引用
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 将子工程的坐标與父工程坐标中重複的内容删除
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 在父工程中統一junit的依賴
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 在子工程中删除junit依賴部分的版本号部分
- 配置繼承後,執行安裝指令時,要先安裝父工程
十三、聚合
- 作用:一鍵安裝各個子產品的工程
- 配置方式:在一個“總的聚合工程中”配置各個參與聚合的子產品
自動化建構工具 Maven一、建構二、Maven得核心概念三、第一個Maven工程二、常見的Maven指令三、關于聯網的問題四、POM五、坐标六、倉庫七、依賴[初步]八、生命周期九、使用Maven十、依賴[進階]十一、統一管理依賴版本十二、繼承十三、聚合十四、自動部署項目 - 在聚合工程的pom.xml上右鍵–>run as–>maven install
十四、自動部署項目
配置build标簽
build标簽的作用:配置目前工程建構過程中遇到的特殊設定