一.Maven介紹
1.1 什么是 Maven
Maven 的正確發音是[ˈmevən],而不是“馬瘟”以及其他什么瘟。Maven 在美國是一個口語化的詞
語,代表專家、內行的意思。
一個對 Maven 比較正式的定義是這么說的:Maven 是一個項目管理工具,它包含了一個項目對象模
型 (POM:Project Object Model),一組標准集合,一個項目生命周期(Project Lifecycle),一個依賴管
理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標
(goal)的邏輯。
Maven 是項目管理工具 對軟件項目提供構建與依賴管理
Maven是Apache下的Java開源項目
1.2Maven 核心特性
項目設置遵循統一的規則,保證不同開發環境的兼容性
強大的依賴管理,項目依賴組件自動下載、自動更新
可擴展的插件機制,使用簡單,功能豐富
Maven 的依賴管理:傳統工程jar包放在項目中,maven開發的工程根據jar的坐標找到jar倉庫。
倉庫檢索網站https://search.maven.org/
項目的一鍵構建:我們的項目,往往都要經歷編譯、測試、運行、打包、安裝 ,部署等一系列過程。指的是項目從編譯、測試、運行、打包、安裝 ,部署整個過程都交給 maven 進行管理,這個過程稱為構建。
二. Maven 的使用
1.下載安裝:
1.1下載並解壓到D盤
下載第二個
1.2添加環境變量
變量名:MAVEN_HOME
變量值:D:\apache-maven-3.8.1
在Path中添加:%MAVEN_HOME%\bin
確保環境變量中有JAVAHOME
輸入mvn -v
1.3本地倉庫的配置
MAVE_HOME/conf/settings.xml 文件中配置本地倉庫位置
<localRepository>D:\Apache\repository</localRepository>
1.4設置maven編碼為utf-8
設置環境變量
變量名 MAVEN_OPTS
變量值 -Xms256m -Xmx512m -Dfile.encoding=UTF-8
運行mvn -v查看修改結果
2.maven項目標准目錄結構
src/main/java目錄 | 核心代碼 |
src/main/resources | 配置文件部分 |
src/test/java目錄 | 測試代碼部分,如 JUnit 測試類 |
src/test/resources | 測試配置文件,如 spring, hibernate 配置文件 |
src/main/webapp | 頁面資源 ,js,css,圖片等等 |
target | 項目輸出的目錄,用於存儲jar,war文件 |
target/classes | 字節碼(.class)的編譯輸出目錄 |
pom.xml | maven 項目核心配置文件 |
3.Maven常用命令
命令 | 用途 |
mvn archetype:generate | 創建Maven工程結構 |
mvn compile | 編譯源代碼 |
mvn test | 執行測試用例 |
mvn clean | 清除產生的項目 |
mvn package | 項目打包 |
mvn install | 安裝至本地倉庫 |
1.clean
clean 是 maven 工程的清理命令,執行 clean 會刪除 target 目錄及內容。
2.compile
compile 是 maven 工程的編譯命令,作用是將 src/main/java 下的文件編譯為 class 文件輸出到 target
目錄下。
3.test
test 是 maven 工程的測試命令 mvn test,會執行 src/test/java 下的單元測試類。也會編譯src/main/java的代碼
4.package
package 是 maven 工程的打包命令,對於 java 工程執行 package 打成 jar 包,對於 web 工程打成 war
包。
5.install
install 是 maven 工程的安裝命令,執行 install 將 maven 打成 jar 包或 war 包發布到本地倉庫。會執行compile,test,package,把項目放在了本地倉庫
4.Maven生命周期
5.Maven概念模型
項目對象模型 (Project Object Model)
一個 maven 工程都有一個 pom.xml 文件,通過 pom.xml 文件定義項目的坐標、項目依賴、項目信息、
插件目標等。
賴管理系統(Dependency Management System)
通過 maven 的依賴管理對項目所依賴的 jar 包進行統一管理。
比如:項目依賴 junit4.9,通過在 pom.xml 中定義 junit4.9 的依賴即使用 junit4.9,如下所示是 junit4.9
的依賴定義:
<!-- 依賴關系 -->
<dependencies>
<!-- 此項目運行使用 junit,所以此項目依賴 junit -->
<dependency>
<!-- junit 的項目名稱 -->
<groupId>junit</groupId>
<!-- junit 的模塊名稱 -->
<artifactId>junit</artifactId>
<!-- junit 版本 -->
<version>4.9</version>
<!-- 依賴范圍:單元測試時使用 junit -->
<scope>test</scope>
</dependency>
三.配置
pom.xml 是 Maven 項目的核心配置文件,位於每個工程的根目錄,基本配置如下:
<project > :文件的根節點 .
<modelversion > : pom.xml 使用的對象模型版本
<groupId > :項目名稱,一般寫項目的域名
<artifactId > :模塊名稱,子項目名或模塊名稱
<version > :產品的版本號 .
<packaging > :打包類型,一般有 jar、war、pom 等
<name > :項目的顯示名,常用於 Maven 生成的文檔。
<description > :項目描述,常用於 Maven 生成的文檔
<dependencies> :項目依賴構件配置,配置項目依賴構件的坐標
<build> :項目構建配置,配置編譯、運行插件等。
1.設置Maven本地倉庫路徑
在setings.xml 文件<settings節點下添加
<localRepository>D:/maven_repositroy</localRepository>
2.坐標
GroupId:機構或者團體的英文,采用 逆向域名 形式書寫
ArtifactId:項目名稱 說明其用途,例如:cms,oa...
Version: 版本號,一般采用 版本+單詞 形式 例如1.1.0.RELEASE
3.依賴范圍
依賴范圍 | 編譯有效 | 測試有效 | 運行時有效 | 例如 |
compile | Y | Y | Y | spring-core |
test | Y | Junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | Y | JDBC驅動 | |
system | Y | Y | 本地的,Maven倉庫之外的類庫 |
4.設置jdk版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
5.設置tomcat插件
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat9-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path></path>
</configuration>
</plugin>
</plugins>
6.Maven國內服務器
maven.aliyun.com 倉庫服務 (aliyun.com)
1.選擇public
2.在版本下添加依賴
<repositories>
<repository>
<!--創建私服-->
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
四.idea 開發 maven 項目
1 打開FileSettings 配置 maven
-DarchetypeCatalog=internal在沒網時會加載本地的
1 Maven聚合工程概念
Maven聚合工程:就是可以在一個Maven父工程中創建多個組件(項目),這個多個組件之間可以相互依賴,實現組件的復用
2 創建Maven聚合工程
2.1 創建Maven父工程
Maven聚合工程的父工程 packing必須為 pom
-
創建一個Maven工程
-
修改父工程的pom.xml,設置打包方式為pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qfedu</groupId> <artifactId>maven-parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> </project>
-
父工程用於管理子工程,不進行業務實現,因此src目錄可以選擇性刪除
2.2 創建Module
-
選擇父工程---右鍵---New---Module
-
輸入子工程名稱(g和v都從父工程繼承)
-
子工程的pom文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--module的pom繼承 父工程的pom--> <parent> <artifactId>maven-parent</artifactId> <groupId>com.qfedu</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>common</artifactId> </project>
-
父工程的pom文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qfedu</groupId> <artifactId>maven-parent</artifactId> <version>1.0.0</version> <!-- 聲明當前父工程的子module --> <modules> <module>common</module> </modules> <packaging>pom</packaging> </project>
3.1 依賴繼承
-
在父工程的pom文件添加的依賴,會被子工程繼承
3.2 依賴版本管理
在父工程的pom.xml的dependencyManagement中添加依賴,表示定義子工程中此依賴的默認版本(此定義並不會讓子工程中添加當前依賴)
<!-- 依賴管理:在dependencyManagement中添加依賴,表示定義子工程中此依賴的默認版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>
</dependencyManagement>