Maven是一個項目管理和綜合工具。Maven提供了開發人員構建一個完整的生命週期框架。開發團隊能夠自動完成項目的基礎工具建設,Maven使用標準的目錄結構和默認構建生命週期。 咱們常常用的就是jar包的管理。html
POM( Project Object Model,項目對象模型 ) 是 Maven 工程的基本工做單元,是一個XML文件,包含了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。apache
在建立 POM 以前,咱們首先須要描述項目組 (groupId), 項目的惟一ID。mybatis
<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 的倉庫中,它用來區分不一樣的版本。例如:yii com.company.bank:consumer-banking:1.0 |
packaging | 項目打包的類型,可使jar、war、rar、ear、pom,默認是jar |
dependencies和dependencymaven
前者包含後者。前面說了,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包了,則不會到遠程倉庫下載。ui
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>
標籤的含義以下:
id
maven倉庫的id(自定義)
name
maven倉庫的名稱(自定義)
url
maven倉庫的url(能夠替換爲阿里的鏡像倉庫:http://maven.aliyun.com/nexus/content/groups/public/,能夠是本身搭建的maven私服)
releases
maven倉庫中版本爲release的包
snapshots
maven倉庫中版本爲snapshots的包
一個典型的 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