Maven是一個項目管理和綜合工具。Maven提供了開發人員構建一個完整的生命周期框架。開發團隊可以自動完成項目的基礎工具建設,Maven使用標准的目錄結構和默認構建生命周期。 我們經常用的就是jar包的管理。
Maven POM
POM( Project Object Model,項目對象模型 ) 是 Maven 工程的基本工作單元,是一個XML文件,包含了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。
在創建 POM 之前,我們首先需要描述項目組 (groupId), 項目的唯一ID。
<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>
<!-- 公司或者組織的唯一標志,並且配置時生成的路徑也是由此生成, 如com.companyname.project-group,maven會將該項目打成的jar包放本地路徑:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 項目的唯一ID,一個groupId下面可能多個項目,就是靠artifactId來區分的 -->
<artifactId>project</artifactId>
<!-- 版本號 -->
<version>1.0</version>
<packaging>jar</packaging>
</project>
所有 POM 文件都需要 project 元素和三個必需字段:groupId,artifactId,version。
| 節點 | 描述 |
|---|---|
| project | 工程的根標簽。 |
| modelVersion | 模型版本需要設置為 4.0。 |
| groupId | 這是工程組的標識。它在一個組織或者項目中通常是唯一的。例如,一個銀行組織 com.companyname.project-group 擁有所有的和銀行相關的項目。 |
| artifactId | 這是工程的標識。它通常是工程的名稱。例如,消費者銀行。groupId 和 artifactId 一起定義了 artifact 在倉庫中的位置。 |
| version | 這是工程的版本號。在 artifact 的倉庫中,它用來區分不同的版本。例如: com.company.bank:consumer-banking:1.0 |
| packaging | 項目打包的類型,可以使jar、war、rar、ear、pom,默認是jar |
dependencies和dependency
前者包含后者。前面說了,Maven的一個重要作用就是統一管理jar包,為了一個項目可以build或運行,項目中不可避免的,會依賴很多其他的jar包,在Maven中,這些依賴就被稱為dependency。
說到這里,就有一個本地倉庫和遠程倉庫的概念了。本地倉庫和遠程倉庫是這樣的,Maven工程首先會從本地倉庫中獲取jar包,當無法獲取指定jar包時,本地倉庫會從遠程倉庫(中央倉庫)中下載jar包,並放入本地倉庫以備將來使用。本次倉庫路徑:c:\用戶\{找到計算機用戶}\.m2。遠程倉庫默認使用的是http://repo2.maven.org/maven2/,但是我們也可以修改。
舉個例子,比方說我的項目中用到了MyBatis,那么pom可以添加這段配置:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.5</version>
</dependency>
</dependencies>
點擊ctrl+s保存,Eclipse就會自動到遠程倉庫里下載mybatis的jar包到本地倉庫,通過groupId、artifactId、version唯一標識一個Maven項目,有了這三個元素,我們就可以去遠程倉庫下載,如果本地倉庫里已經有該jar包了,則不會到遠程倉庫下載。
properties
properties是用來定義一些配置屬性的,例如project.build.sourceEncoding(項目構建源碼編碼方式),可以設置為UTF-8,防止中文亂碼,也可定義相關構建版本號,便於日后統一升級。通過${}可以在dependency引用該模塊定義的屬性。
<properties>
<mybatis.version>3.2.5</mybatis.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
如上代碼,我們在properties中定義了一個mybatis.version的屬性,然后再下面的version里面就可以引用該屬性了。
遠程倉庫修改
<repositories>
<repository>
<id>Dcm4Che</id>
<name>Dcm4Che</name>
<url>http://www.dcm4che.org/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
標簽的含義如下:
-
idmaven倉庫的id(自定義) -
namemaven倉庫的名稱(自定義) -
urlmaven倉庫的url(可以替換為阿里的鏡像倉庫:http://maven.aliyun.com/nexus/content/groups/public/,可以是自己搭建的maven私服) -
releasesmaven倉庫中版本為release的包 -
snapshotsmaven倉庫中版本為snapshots的包
Maven 構建生命周期
一個典型的 Maven 構建(build)生命周期是由以下幾個階段的序列組成的:

| 階段 | 處理 | 描述 |
|---|---|---|
| 驗證 validate | 驗證項目 | 驗證項目是否正確且所有必須信息是可用的 |
| 編譯 compile | 執行編譯 | 源代碼編譯在此階段完成 |
| 測試 Test | 測試 | 使用適當的單元測試框架(例如JUnit)運行測試。 |
| 包裝 package | 打包 | 創建JAR/WAR包如在 pom.xml 中定義提及的包 |
| 檢查 verify | 檢查 | 對集成測試的結果進行檢查,以保證質量達標 |
| 安裝 install | 安裝 | 安裝打包的項目到本地倉庫,以供其他項目使用 |
| 部署 deploy | 部署 | 拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程 |
常用的maven命令如下:
1. 編譯源代碼:
mvn compile
2. 運行測試:
mvn test
3. 打包:
mvn package
4.打包到本地倉庫(.m2路徑下)
mvn install
5.清除產生的項目(清楚target目錄文件)
mvn clean
6.上傳到私服
mvn deploy
7.組合命令
mvn clean install --清楚打包 mvn -Dtest package 跳過測試 只打包
文章參考
http://www.runoob.com/maven/maven-tutorial.html
https://www.yiibai.com/maven
https://www.cnblogs.com/hongwz/p/5456578.html

