Maven詳解
| > # 第一章 Maven詳解 |
|---|
| 1.1.1 初識(shí)Maven |
| Maven是一個(gè)跨平臺(tái)的項(xiàng)目管理工具,是Apache組織的一個(gè)頗為成功的開源項(xiàng)目。Maven主要服務(wù)于基于Java的項(xiàng)目的構(gòu)建、項(xiàng)目信息管理和依賴管理。 |
| Maven的英語(yǔ)含義是"專家、內(nèi)行" |
| 1.1.2 Maven的作用 |
| Maven最大作用是構(gòu)建項(xiàng)目。 |
| Maven 可以為項(xiàng)目的構(gòu)建過程提供很大的便利。 |
| 1. Maven可以創(chuàng)建項(xiàng)目。 (Maven項(xiàng)目具有統(tǒng)一的項(xiàng)目結(jié)構(gòu)) |
| 2. Maven可以引入依賴的Jar包 (核心的概念——倉(cāng)庫(kù)) |
| Maven倉(cāng)庫(kù) 分為 本地倉(cāng)庫(kù) 和遠(yuǎn)程倉(cāng)庫(kù)。 遠(yuǎn)程倉(cāng)庫(kù)又分為中央倉(cāng)庫(kù) 私服 和其他公共庫(kù) |
| 1. 本地倉(cāng)庫(kù):開發(fā)人員計(jì)算機(jī)上的Maven倉(cāng)庫(kù)。 (基于坐標(biāo)使用本地倉(cāng)庫(kù)的依賴文件,默認(rèn)情況下,每個(gè)用戶在自己的用戶目錄下都有一個(gè)倉(cāng)庫(kù)目錄。也是默認(rèn)優(yōu)先級(jí)最高的) |
| 2. 遠(yuǎn)程倉(cāng)庫(kù): 網(wǎng)絡(luò)上的倉(cāng)庫(kù) |
| 如果不執(zhí)行Maven命令。本地倉(cāng)庫(kù)的目錄是不存在的。用戶輸入一條Maven命令時(shí),Maven才會(huì)創(chuàng)建本地倉(cāng)庫(kù),然后根據(jù)配置和需要從遠(yuǎn)程下載依賴的構(gòu)件到本地倉(cāng)庫(kù)。 |
| 3. 中央倉(cāng)庫(kù): Maven官方提供的倉(cāng)庫(kù)大全。 |
| 最原始的本地倉(cāng)庫(kù)是空的。Maven必須知道至少一個(gè)可用的遠(yuǎn)程倉(cāng)庫(kù),才能在執(zhí)行Maven命令時(shí)下載到需要的依賴也就是Jar包。中央倉(cāng)庫(kù)時(shí)默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù)。但也是優(yōu)先級(jí)最靠后的。 Maven的安裝文件默認(rèn)帶了中央倉(cāng)庫(kù)的配置。 |
| 4. 私服:局域網(wǎng)中搭建的Maven倉(cāng)庫(kù) (特殊) |
| 它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù)。私服代理廣域網(wǎng)上的遠(yuǎn)程倉(cāng)庫(kù)。Maven需要下載構(gòu)建時(shí)先從私服請(qǐng)求,再?gòu)耐獠康倪h(yuǎn)程倉(cāng)庫(kù)下載,然后緩存在私服上。 |
| 5. 其他公共庫(kù):將收集的依構(gòu)建而成的倉(cāng)庫(kù)。比如阿里巴巴的公共庫(kù) |
| ### Maven 查找依賴的順序 簡(jiǎn)單的來說,先本地 后 私服 和其他 最后中央下面有詳解 |
| 倉(cāng)庫(kù)可以管理Maven項(xiàng)目所需的Jar包(在Maven中稱為依賴)。只需簡(jiǎn)單的Maven操作就可以實(shí)現(xiàn)Jar包的引入。 |
| 3. Maven 可以發(fā)布管理項(xiàng)目 |
| > ## 1.3 Maven的常用操作 |
| 第一步。創(chuàng)建一個(gè)Empty Project 空項(xiàng)目 |
| 第二步。創(chuàng)建Maven Module |
| 1. 點(diǎn)擊 Create New Project 進(jìn)行項(xiàng)目創(chuàng)建 |
|
| 
| 2. 選擇 Maven |
| 3. SDK 選擇 1.7 以上版本 |
| 4. 勾選 Create from archetype,使用 Maven 模板進(jìn)行項(xiàng)目創(chuàng)建 |
| 5. 選擇 maven-archetype-webapp 模板 |
| 6. 點(diǎn)擊 Next 進(jìn)入下一步 |
|
| 7. 填寫項(xiàng)目的 GroupId |
| 8. 填寫項(xiàng)目的 ArtifactId |
| 9. 點(diǎn)擊 Next 進(jìn)入下一步 |
|
|
| 10. 選擇本地 Maven 環(huán)境 |
| 11. 點(diǎn)擊 Next 進(jìn)入下一步 |
| 
|
| 12. 填寫項(xiàng)目名稱,盡量與 ArtifactId 保持一致 |
| 13. 點(diǎn)擊 Next 進(jìn)入下一步 |
| 
|
| 14. 如果是首次使用 Maven,需要遠(yuǎn)程下載 JAR 文件,并且需要構(gòu)建項(xiàng)目,所以,此步非常耗時(shí),請(qǐng)耐性等待 |
| 
|
| 15. 當(dāng)出現(xiàn)以下界面時(shí),則表示項(xiàng)目構(gòu)建成功 |
| |
| 
|
| 第10的配置的內(nèi)容有4項(xiàng)。 |
| |
| (1).Maven home directory:Maven 安裝的路徑。 |
| |
| (2).User settings file:Maven的setttings.xml的位置。是核心配置文件,位于安裝路徑中的conf文件夾下。可以配置 |
| |
| 1. 本地倉(cāng)庫(kù)地址的配置。 |
| |
|
| |
| 2. 公共倉(cāng)庫(kù)的配置。 |
| |
| 找到mirrors,默認(rèn)也是注釋。默認(rèn)從中央倉(cāng)庫(kù)中下載。 推薦采用阿里巴巴的公共倉(cāng)庫(kù)。在mirrors中添加一些代碼。 |
| |
| (3).Local repository:Maven 本地倉(cāng)庫(kù)的路徑。 |
| |
| (4).Properties :Maven項(xiàng)目的屬性 |
| |
| 推薦添加一條配置archetypeCatalog=internal |
| |
| 1.3.2 Pom文件詳解 |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
| 具體的編譯和打包工作是通過build標(biāo)簽中的plugin完成的。默認(rèn)情況下 Maven會(huì)綁定插件來完成基礎(chǔ)操作。 |
| |
| | plugin名稱 | 作用 | 對(duì)應(yīng)IDEA操作 | |
| | :--------------------------------: | ---------------------------- | ------------ | |
| | maven-clean-plugin | 清理上一次執(zhí)行創(chuàng)建的目標(biāo)文件 | clean | |
| | maven-resources-plugin | 處理源資源和測(cè)試資源文件 | compile | |
| | maven-compiler-plugin | 編譯源文件和測(cè)試源文件 | compile | |
| | maven-surefire-plugin | 執(zhí)行測(cè)試文件 | test | |
| | maven-war-plugin或maven-jar-plugin | 創(chuàng)建war或jar文件 | package | |
| | maven-install-plugin | 將war文件打包放入本地倉(cāng)庫(kù) | install | |
| | maven-deploy-plugin | 發(fā)布jar文件到指定的倉(cāng)庫(kù) | deploy | |
| |
| 
|
| |
| Maven操作有9個(gè)。 |
| |
| 1. clean:清除 |
| 2. validate:驗(yàn)證工程是否正確 |
| 3. compile:編譯項(xiàng)目 |
| 4. test:執(zhí)行項(xiàng)目中的測(cè)試用例。 |
| 5. package:打包 |
| 6. verify:運(yùn)行任何檢查 |
| 7. install:將項(xiàng)目打包進(jìn)本地倉(cāng)庫(kù)。 |
| 8. site:生成項(xiàng)目的網(wǎng)頁(yè)形式的文檔。 |
| 9. deploy:將項(xiàng)目發(fā)布到遠(yuǎn)程倉(cāng)庫(kù)。 |
| |
| > ## 1.3.4 熱部署 |
| |
| 修改了代碼后不需要重啟項(xiàng)目就可以看到功能效果的一種部署方式。默認(rèn)不開啟。 |
| |
| 如何開啟熱部署? |
| |
| 1.FIle -->settings--> 找到 Build,Exception,Deployment -->Complier -->把 Build project automatically 對(duì)勾 勾上 |
| |
| 2.ctrl+shift +alt+/ |
| |
| > ## 1.4 Maven實(shí)戰(zhàn) |
| |
| ### 1.4.1 初識(shí)Nexus私服 |
| |
| 優(yōu)點(diǎn): |
| |
| 1. 私服倉(cāng)庫(kù)是局域網(wǎng)內(nèi)的,文件下載速度快 |
| 2. 可自行進(jìn)行構(gòu)件的管理和維護(hù),包括第三方構(gòu)件以及項(xiàng)目模塊中所依賴的自主開發(fā)的公共構(gòu)件。 |
| 3. 提高了工作效率。 |
| |
| Nexus是一個(gè)強(qiáng)大的倉(cāng)庫(kù)管理工具,極大的簡(jiǎn)化了內(nèi)部倉(cāng)庫(kù)的維護(hù)和外部倉(cāng)庫(kù)的訪問。 |
| |
| Nexus提供倆種安裝包: |
| |
| 1. 內(nèi)嵌Jetty容器的bundle包(只需要有JRE就可以直接運(yùn)行) |
| 2. war包(須將其發(fā)布到Web容器中才能使用) 安裝詳見教材 |
| |
| 1.4.4 Nexus倉(cāng)庫(kù)及常規(guī)操作 |
| |
| 1.Nexus倉(cāng)庫(kù) |
| |
| Nexus的Repositories中默認(rèn)有7個(gè)倉(cāng)庫(kù)。包含第三方依賴庫(kù)、中央倉(cāng)庫(kù)、發(fā)布版本以及快照版本等等。 |
| |
| Nexus的預(yù)定義倉(cāng)庫(kù)的類型(Type)、策略(Policy)、格式(Format)各有不同。 |
| |
| 1).倉(cāng)庫(kù)類型有4種。 |
| |
| 1).Hosted Repository本地倉(cāng)庫(kù)。內(nèi)部項(xiàng)目的發(fā)布集。 |
| |
| 2).Proxy Repository代理倉(cāng)庫(kù)。被用來代理遠(yuǎn)程的公共倉(cāng)庫(kù)。 |
| |
| 3).Virtual Repository 虛擬倉(cāng)庫(kù) |
| |
| 4). Repository Group 倉(cāng)庫(kù)組 |
| |
| 2).倉(cāng)庫(kù)策略 |
| |
| 1. Release 發(fā)布版本 |
| 2. Snapshot 快照版本 |
| |
| |
| |
| # Maven 查找依賴的順序 |
| |
| maven項(xiàng)目使用的倉(cāng)庫(kù)一共有如下幾種方式: |
| |
| 1. 中央倉(cāng)庫(kù),這是默認(rèn)的倉(cāng)庫(kù) |
| 2. 鏡像倉(cāng)庫(kù),通過 sttings.xml 中的 settings.mirrors.mirror 配置 |
| 3. 全局profile倉(cāng)庫(kù),通過 settings.xml 中的 settings.repositories.repository 配置 |
| 4. 項(xiàng)目倉(cāng)庫(kù),通過 pom.xml 中的 project.repositories.repository 配置 |
| 5. 項(xiàng)目profile倉(cāng)庫(kù),通過 pom.xml 中的 project.profiles.profile.repositories.repository 配置 |
| 6. 本地倉(cāng)庫(kù) |
| |
| |
| |
| - 只要 ~/.m2/repository 中包含依賴,無論怎么配置,都會(huì)優(yōu)先使用local本地倉(cāng)庫(kù)中的jar. |
| |
| ### 最終結(jié)論 |
| |
| - settings_mirror 的優(yōu)先級(jí)高于 central |
| - settings_profile_repo 優(yōu)先級(jí)高于 settings_mirror |
| - settings_profile_repo 優(yōu)先級(jí)高于 pom_repositories |
| - settings_profile_repo 優(yōu)先級(jí)高于 pom_profile_repo |
| - pom_profile_repo 優(yōu)先級(jí)高于 pom_repositories |
| - pom_repositories 優(yōu)先級(jí)高于 settings_mirror |
| |
| 通過上面的比較得出完整的搜索鏈: |
| |
| local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central |
| |
| 本地倉(cāng)庫(kù)> 全局profile倉(cāng)庫(kù) 項(xiàng)目profile倉(cāng)庫(kù) pom中的倉(cāng)庫(kù) 鏡像倉(cāng)庫(kù) 中央倉(cāng)庫(kù) |
| |
| |
| |
| > ### MAVEN依賴的優(yōu)先原則 |
| |
| maven依賴的優(yōu)先原則 |
| |
| 1.依賴最短路徑優(yōu)先原則 |
| |
| 一個(gè)項(xiàng)目Demo依賴了兩個(gè)jar包,其中A-B-C-X(1.0) , A-D-X(2.0)。由于X(2.0)路徑最短,所以項(xiàng)目使用的是X(2.0)。 |
| |
| 2.pom文件中申明順序優(yōu)先 |
| |
| 如果A-B-X(1.0) ,A-C-X(2.0) 這樣的路徑長(zhǎng)度一樣怎么辦呢?這樣的情況下,maven會(huì)根據(jù)pom文件聲明的順序加載,如果先聲明了B,后聲明了C,那就最后的依賴就會(huì)是X(1.0)。 |
| |
| 3. 覆蓋優(yōu)先原則 |
| |
| 子pom內(nèi)聲明的優(yōu)先于父pom中的依賴。 |


浙公網(wǎng)安備 33010602011771號(hào)