maven是什麼?
Maven是基於項目對象模型(POM project object model),可以通過一小段描述信息(配置)來管理項目的構建,報告和文檔的軟件項目管理工具[百度百科]
POM( Project Object Model,項目對象模型 ) 是 Maven 工程的基本工作單元,是一個XML文件,包含了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。Maven的核心功能便是合理敘述項目間的依賴關係。
所有 POM 文件都需要 project 元素和三個必需字段:groupId,artifactId,version。
<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>
</project>
Maven的生命週期
Maven 有以下三個標準的生命週期:
- clean:項目清理的處理
- default(或 build):項目部署的處理
- site:項目站點文檔創建的處理
每個生命週期中都包含着一系列的階段(phase)。這些 phase 就相當於 Maven 提供的統一的接口,然後這些 phase 的實現由 Maven 的插件來完成。一個典型的 Maven 構建(build)生命週期是由以下幾個階段的序列組成的:
- 驗證 validate
- 編譯 compile
- 測試 Test
- 包裝 package
- 檢查 verify
- 安裝 install
- 部署 deploy
Maven 插件
我們在輸入 mvn 命令的時候 比如 mvn clean,clean 對應的就是 Clean 生命週期中的 clean 階段。但是 clean 的具體操作是由 maven-clean-plugin 來實現的。所以說 Maven 生命週期的每一個階段的具體實現都是由 Maven 插件實現的。
** 當一個階段通過 Maven 命令調用時,例如 mvn compile,只有該階段之前以及包括該階段在內的所有階段會被執行。**
不同的 maven 目標將根據打包的類型(JAR / WAR / EAR),被綁定到不同的 Maven 生命週期階段。
Maven 倉庫
Maven 倉庫能幫助我們管理構件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 倉庫有三種類型:
- 本地(local)
- 中央(central):http://search.maven.org/#browse
- 遠程(remote)
默認情況下,不管Linux還是 Windows,每個用戶在自己的用戶目錄下都有一個路徑名爲 .m2/respository/ 的倉庫目錄。
Maven 本地倉庫默認被創建在 %USER_HOME% 目錄下。要修改默認位置,在 %M2_HOME%\conf 目錄中的 Maven 的 settings.xml 文件中定義另一個路徑。
遠程倉庫
遠程倉庫是開發人員自己定製倉庫,包含了所需要的代碼庫或者其他工程中用到的 jar 文件。
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
** Maven 阿里雲(Aliyun)倉庫 **
Maven 倉庫默認在國外, 國內使用難免很慢,我們可以更換爲阿里雲的倉庫。
第一步:修改 maven 根目錄下的 conf 文件夾中的 setting.xml 文件,在 mirrors 節點上.
第二步: pom.xml文件裏添加以上內容。
Maven 環境配置
Maven 是一個基於 Java 的工具,所以要做的第一件事情就是安裝 JDK。Maven 3.3 要求 JDK 1.7 或以上。
Maven 快照(SNAPSHOT)
快照是一種特殊的版本,指定了某個當前的開發進度的副本。不同於常規的版本,Maven 每次構建都會在遠程倉庫中檢查新的快照。
Maven 的 Snapshot 版本與 Release 版本
1、Snapshot 版本代表不穩定、尚處於開發中的版本。
2、Release 版本則代表穩定的版本。
dependencies與dependencyManagement搭配使用
dependencies即使在子項目中不寫該依賴項,那麼子項目仍然會從父項目中繼承該依賴項(全部繼承)
dependencyManagement裏只是聲明依賴,並不實現引入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,並且沒有指定具體版本,纔會從父項目中繼承該項,並且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那麼會使用子項目中指定的jar版本。
Maven目錄結構
Maven默認約定了一套目錄結構,在通過Maven創建了項目以後,項目的目錄結構就是以這套目錄結構作爲模板創建的。
${basedir}
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- resources
| | `-- filters
| `-- test
| | `-- java
| | `-- resources
| | `-- filters
| `-- it
| `-- assembly
| `-- site
`-- LICENSE.txt
`-- NOTICE.txt
`-- README.txt
Maven通俗講解: https://blog.csdn.net/shuzhe66/article/details/45009175
Maven 教程: http://www.runoob.com/maven/maven-tutorial.html