是什麼?#
- Apache Maven是一個由 java 語言編寫的軟體專案管理及自動建構工具
Apache Maven core
能幹什麼?#
專案建構和依賴管理#
- 透過在專案物件模型(Project Object Model,POM)檔案中添加 dependency 完成依賴管理
進行專案建構生命週期中的操作執行#
- 透過使用 maven 中的插件進行配置,完成生命週期目標管理
階段 | 處理 | 描述 |
---|---|---|
清理 clean | 清理專案 | 清理專案之前產出的 JAR/WAR 和建構資訊 |
驗證 validate | 驗證專案 | 驗證專案是否正確且所有必須資訊是可用的 |
編譯 compile | 執行編譯 | 源代碼編譯在此階段完成 |
測試 Test | 測試 | 使用適當的單元測試框架(例如 JUnit)運行測試。 |
包裝 package | 打包 | 創建 JAR/WAR 包如在 pom.xml 中定義提及的包 |
檢查 verify | 檢查 | 對整合測試的結果進行檢查,以保證品質達標 |
安裝 install | 安裝 | 安裝打包的專案到本地倉庫,以供其他專案使用 |
部署 deploy | 部署 | 拷貝最終的工程包到遠端倉庫中,以共享給其他開發人員和工程 |
如何使用?#
安裝與配置#
目前 IDE 都是內置集成了 maven,一般安裝 maven 的目的是為了在命令行中可以執行 maven 的生命週期操作,完成專案編譯建構。
下載#
官方下載地址:http://maven.apache.org/download.cgi
C:.
│ LICENSE
│ NOTICE
│ README.txt
│
├─bin
│ m2.conf
│ mvn
│ mvn.cmd
│ mvnDebug
│ mvnDebug.cmd
│ mvnyjp
│
├─boot
│ plexus-classworlds-2.8.0.jar
│ plexus-classworlds.license
│
├─conf
│ │ settings.xml
│ │ toolchains.xml
│ │
│ └─logging
│ simplelogger.properties
│
└─lib
配置#
環境變數配置#
- 新增系統變數MAVEN_HOME,值填寫 maven 解壓出來的根目錄
- 環境變數 path 中新增一條記錄 %MAVEN_HOME%\bin
- 驗證環境變數配置生效
打開 cmd,輸入 mvn -version 能夠查詢到 maven 的版本則說明 maven 配置成功
Maven 倉庫配置#
- 當需要引入依賴的 jar 包時,maven 會在本地倉庫進行查找,本地資源倉庫默認在用戶目錄的.m2 目錄下的repository目錄。
- 如果本地沒有對應資源,就會從中央倉庫進行下載。
- 由於中央倉庫是境外伺服器,所以需要將阿里雲鏡像加入到 maven 配置中。
- 中央倉庫的修改
在 maven 目錄的 conf 目錄下,修改settings.xml中mirrors標籤中加入如下內容:
修改完之後,把 settings.xml 檔案複製到.m2 目錄下,即可以被全局調用。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
Tip
xml(extensible markup language 可擴展標記語言)
<元素 属性 ="属性值"> 內容 </ 元素 >
xml 中用 表示註釋。
- 本地倉庫的修改
<localRepository>/path/to/local/repo</localRepository>
IDEA 中的 maven 配置#
在 IDEA 中的File->Settings選單裡找到 Build,Execution,Deployment選單,在Build tools 選單中
點擊 maven,確認User settings file檔案是本地.m2 目錄下的settings.xml檔案,倉庫目錄是本地.m2 目錄下的 repository 目錄。
使用#
管理依賴#
在 project 元素中添加 dependencies,用 dependency 加依賴
maven 引入依賴:
- 從本地倉庫找
- 到中央倉庫找
- 遠端倉庫 (自己內網搭建的倉庫地址)
專案編譯環境設定#
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
管理生命週期#
使用不同的 maven 建構插件來完成生命週期動作
- 執行測試代碼
- 專案中的測試代碼運行可以直接透過執行 test 生命週期來完成;
- 在編寫了測試代碼的專案中,maven 在完成打包操作時也會自動執行在test目錄下的測試代碼;
- 而如果想要定制執行部分的測試代碼或者有其他需求,則可以透過引入surefire插件來完成配置;
- 在 pom 檔案的元素裡的元素裡添加如下插件:
<!-- 測試插件surefire-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19</version>
</dependency>
</dependencies>
<!-- configuration元素可以省略,那麼會默認運行/src/test/java下的所有檔案 -->
<!-- 在configuration中可以配置放在src/test/java目錄下需要執行的類檔名 -->
<configuration>
<!-- 如果要跳過單元測試執行,加上skipTests-->
<!-- <skipTests>true</skipTests>-->
<!-- 配置要執行的測試代碼,配置類名即可。支持使用*做通配,比如*Test表示Test結尾的檔案,也支持正則表達式-->
<includes>
<include>ErrorLoginTest</include>
<include>MavenJunitTest</include>
</includes>
<!-- 配置不執行的測試類-->
<excludes>
<exclude>LoginSuite</exclude>
</excludes>
</configuration>
</plugin>
- 打出一個可執行的 jar
可直接使用 java -jar 命令進行運行
- 如果只需要打包專案為 Jar,不需要生成可運行的 Jar,直接順序執行 clean 和 package操作即可。
- 如果需要打出可執行的 Jar 包,則需要配置運行的主類入口,在 pom 檔案中添加元素,在其中添加插件配置並且添加assembly插件配置,如下:
<build>
<plugins>
<plugin>
<artifactId> maven-assembly-plugin </artifactId>
<configuration>
<!-- 表示需要使用專案中依賴的jar -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- 如果需要可執行的jar -->
<archive>
<manifest>
<!--在這裡把要運行的類填進來。 -->
<mainClass>com.testing.class12</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>