Maven是什么?
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>
標簽的含義如下:
-
id
maven倉庫的id(自定義) -
name
maven倉庫的名稱(自定義) -
url
maven倉庫的url(可以替換為阿里的鏡像倉庫:http://maven.aliyun.com/nexus/content/groups/public/,可以是自己搭建的maven私服) -
releases
maven倉庫中版本為release的包 -
snapshots
maven倉庫中版本為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
出處: https://www.cnblogs.com/lc-chenlong
如果喜歡作者的文章,請關注“寫代碼的猿”訂閱號以便第一時間獲得最新內容。本文版權歸作者所有,歡迎轉載
