大話 Maven 系列筆記(一)——Maven概述
第一章、Maven概述
1、 Maven簡介
1.1、Maven是什麼
Maven 是 Apache 基金會組織維護的一款
1.2、Maven能做什麼
1)專案的自動構建,幫助開發人員做專案程式碼的編譯,測試, 打包,安裝,部署等工作。
2)管理依賴(管理專案中使用的各種jar包)。
3)Maven 三大功能:管理依賴、構建專案、管理專案資訊
構建:就是以我們編寫的Java程式碼、框架配置檔案、國際化等其他資原始檔、jsp頁面和圖片等靜態資源作為“原材料”,去“生產”出一個可以執行的專案的過程。
eclipse中的專案與tomcat中編譯結果對比:
構建過程中的幾個主要環節
①清理:刪除以前的編譯結果,為重新編譯做好準備。
②編譯:將Java源程式編譯為位元組碼檔案。
③測試:針對專案中的關鍵點進行測試,確保專案在迭代開發過程中關鍵點的正確性。
④報告:將每一次測試後以標準的格式記錄和展示測試結果。
⑤打包:將一個包含諸多檔案的工程封裝為一個壓縮檔案用於安裝或部署。Java工程對應jar包,Web工程物件war包。
⑥安裝:在Maven環境下特指將打包的結果——Jar包或War包安裝到本地倉庫中。
⑦部署:將打包的結果部署到遠端倉庫或將war包部署到伺服器上執行。
在IDE還不夠智慧的年代,程式設計師每天的任務可能就是不斷的進行大量繁瑣的,重複性的構建過程
程式設計師一天的工作:
能否將這些程式化的工作交給機器自動完成呢?——當然可以!這就是自動化構建。
此時 Maven 的意義就體現出來了,它可以自動的從構建過程的起點一直執行到終點:
1.3、Maven中的概念
①POM
②約定的目錄結構
③座標
④依賴管理
⑤倉庫管理
⑥生命週期
⑦外掛和目標
⑧繼承
⑨聚合
2、下載安裝
地址: http://maven.apache.org/download.cgi 從中下載 .zip檔案。 當前使用的 apache-maven-3.3.9-bin.zip
安裝:
-
確定JAVA_HOME 指定jdk的安裝目錄, 如果沒有JAVA_HOME, 需要在windows的環境變數中建立JAVA_HOME, 它的值是jdk的安裝目錄
-
解壓縮 apache-maven-3.3.9-bin.zip ,把解壓後的檔案放到一個目錄中,目錄的路徑不要有中文, 不要有空格。
-
配置maven環境變數
新建MAVEN_HOME = H:\Developer_tools\maven\apache-maven-3.3.9 編輯path,新增%MAVEN_HOME%\bin;
-
測試maven的安裝。 在命令列執行 mvn -v
maven解壓後的目錄結構
配置檔案在conf / settings.xml,開啟檔案並進行配置
先進行一些初始化配置(照著做就行)
1、先建立一個本地倉庫目錄(隨便在硬碟哪個位置),並在settings.xml中配置本地倉庫路徑
<localRepository>H:/repository</localRepository>
2、配置阿里雲映象(也可以不用配置,maven伺服器在國外,不配置下載依賴會比較慢)
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
3、配置全域性編譯JDK版本(根據自己系統jdk當前版本設定)
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
以上是對maven做一個基本配置,注意:配置資訊找準位置,之後就可以使用了
maven專案使用的大多人遵循的目錄結構,叫做約定的目錄結構。一個maven專案就是一個資料夾,比如專案叫做Hello
Hello 專案資料夾
|--src
|--main 叫做主程式目錄(完成專案功能的程式碼和配置檔案)
|--java 存放原始碼(包和相關的類定義)
|--resources 存放配置檔案
|--test 放置測試程式程式碼的(開發人員自己寫的測試程式碼)
|--java 測試程式碼的(junit)
|--resources 測試程式需要的配置檔案
|--target 編譯後生成的目錄
|--classes 編譯後的class位元組碼檔案目錄
|--test-classes 編譯後的測試class位元組碼檔案目錄
|--pom.xml maven專案的配置檔案, 核心檔案
4.1、建立約定的目錄結構
4.2、maven的使用方式:
1)maven可以獨立使用: 建立專案,編譯程式碼,測試程式,打包,部署等等
2)maven和idea,eclipse一起使用:通過idea藉助maven,實現編碼,測試,打包等等
4.3、為什麼要遵循約定的目錄結構?
我們在開發中如果需要讓第三方工具或框架知道我們自己建立的資源在哪,那麼基本上就是兩種方式:
①以配置檔案的方式明確告訴框架 如 < param-value>classpath:spring-context.xml < /param-value>
②遵循框架內部已經存在的約定 如log4j的配置檔名規定必須為 log4j.properties 或 log4j.xml ;Maven 使用約定的目錄結構
5、 座標及版本規範
座標組成是 groupid, artifiactId, version。
座標作用:確定資源位置,是資源的唯一標識。 在maven中,每個資源都是座標。 座標值是唯一的。簡稱gav
<groupId>com.bjpowernode</groupId>
<artifactId>ch01-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
groupId: 組織名稱標識:使用的公司域名倒寫。
例如:學校的網站 www.bjpowernode.com, groupId: com.bjpowernode
如果專案規模比較大, 也可以是 域名倒寫+大專案名稱。
例如: www.baidu.com , 無人車: com.baidu.appollo
artifactId: 單獨專案的唯一識別符號。比如tomcat, commons等。不要在artifactId中包含點號(.)
packaging: 專案打包的型別。有jar ,war, ear, pom等等,預設是jar
version: 專案的版本號。
Maven在版本管理時候可以使用幾個特殊的字串 SNAPSHOT ,LATEST,RELEASE。
比如"1.0-SNAPSHOT"。各個部分的含義和處理邏輯如下說明:
①SNAPSHOT 這個版本一般用於開發過程中,表示不穩定的版本。
②LATEST 指某個特定構件的最新發布,這個釋出可能是一個釋出版,也可能是一個snapshot版,具體看哪個時間最後。
③RELEASE 指最後一個釋出版。
6、生命週期
Maven生命週期其實就是描述了一個專案從原始碼到部署的整個週期。Maven有三個內建的生命週期:預設(default),清潔(clean)和站點(site)。
清潔(clean) :為執行以下工作做必要的清理。就是我們經常做的,刪除target資料夾。
預設(default) :真正進行專案編譯打包等工作的階段
站點(site) :生成專案報告,站點,釋出站點
預設(default)的生命週期包括以下階段(該階段經過簡化,實際上更加複雜):
-
驗證(validate ) - 驗證專案是否正確,所有必要的資訊可用。
-
編譯 (compile) - 編譯專案的原始碼。
-
測試(test) - 使用合適的單元測試框架測試編譯的原始碼。這些測試不應該要求程式碼被打包或部署。
-
打包 (package)- 採用編譯的程式碼,並以其可分配格式(如JAR )進行打包。
-
驗證(verify ) - 對整合測試的結果執行任何檢查,以確保滿足質量標準。
-
安裝 (install) - 將軟體包安裝到本地儲存庫中,用作本地其他專案的依賴項。
-
部署(deploy) - 在構建環境中完成,將最終的包複製到遠端儲存庫以與其他開發人員和專案共享
說明:
-
各個構建環節執行的順序:不能打亂順序,必須按照既定的正確順序來執行。
-
Maven的核心程式中定義了抽象的生命週期,生命週期中各個階段的具體任務是由外掛來完成的
-
Maven核心程式為了更好的實現自動化構建,按照這一特點執行生命週期中各個階段:。
命令 | 描述 |
---|---|
mvn clean | 清理專案生產的臨時檔案,一般是模組下的target 目錄,但是已經install 到倉庫裡的包不會刪除 |
mvn compile | 編譯主程式:把src/main/java目錄中的java程式碼編譯為class檔案,並在當前目錄下生成一個 target目錄,同時把class檔案拷貝到 target/classes目錄。 這個目錄classes是存放類檔案的根目錄(也叫做類路徑,classpath) |
mvn test-compile | 編譯測試程式:編譯src/test/java目錄中的原始檔, 把生成的class拷貝到target/test-classes目錄。同時把src/test/resources目錄中的檔案拷貝到 test-clasess目錄 |
mvn package | 打包主程式:把專案中資源class檔案和配置檔案都放到一個壓縮檔案中, 預設壓縮檔案是jar型別。 web應用是war型別, 擴充套件是jar,war的 |
mvn test | 測試命令:執行 test-classes目錄的程式, 測試src/main/java目錄中的主程式程式碼是否符合要求。(會生成一個目錄surefire-reports,儲存測試結果) |
mvn install | 將打包的jar/war檔案複製到你的本地倉庫中,供其他模組使用 |
mvn deploy | 部署主程式:把本工程打包,按照座標儲存到本地庫中,還會儲存到私服倉庫中,還會自動把專案部署到 web 容器中 |
mvn site | 生成專案相關資訊的網站 |
mvn dependency:tree | 打印出專案的整個依賴樹 |
mvn archetype:generate | 建立Maven的普通java專案 |
mvn tomcat:run | 在tomcat容器中執行web應用 |
對於我們自己開發的Maven工程,要使用mvn install 命令安裝後就可以進入倉庫
命令: 執行maven功能是由命令發出的。 比如 mvn compile
外掛:要完成構建專案的各個階段,要使用maven的命令, 執行命令的功能是通過外掛完成的。外掛就是jar,一些類。
maven-clean-plugin 版本是 2.5
maven-compiler-plugin 版本3.1,編譯程式碼的外掛
maven-resources-plugin 版本2.6, 資源外掛, 處理檔案的。 作用是src/main/resources目錄中的檔案拷貝target/classes目錄中。
maven-install-plugin 版本 2.4 , 把生成的jar檔案安裝到本地倉庫。
maven-jar-plugin 版本 2.4, 執行打包處理。 生成一個jar擴充套件的檔案, 放在target目錄下。打包的檔案包含的是 src/main目錄中的所有的生成的class和配置檔案,與test無關。
打包的檔名規則是: artifactId-version.packaging,所以生成的是檔名是 ch01-maven-1.0-SNAPSHOT.jar
<groupId>com.bjpowernode</groupId>
<artifactId>ch01-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
9、自定義配置外掛
在pom.xml檔案中, build標籤中設定外掛。設定maven編譯的jdk版本,maven3預設用jdk1.5,maven2預設用jdk1.3
<!-- 設定構建專案相關的內容 -->
<build>
<plugins>
<!-- 設定外掛 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source> <!-- 指定編譯程式碼的jdk版本 -->
<target>1.8</target> <!-- 執行java程式使用的jdk版本-->
<encoding>UTF-8</encoding><!-- 字符集編碼 -->
</configuration>
</plugin>
</plugins>
</build>