Java 專案管理工具 - Maven
阿新 • • 發佈:2018-12-30
類似於 PHP 中的 Composer,NodeJS 中的 npm,Java 用 Maven 來管理依賴關係。
實際上,Maven 負責管理 Java 專案開發過程中的幾乎所有的東西:
- 版本控制:Maven 有自己的版本定義和規則
- 依賴管理:Maven 的基礎功能
- 構建:支援多種應用程式型別,提前定義了對應的構建規則和工具集
- 輸出管理:專案構建的產物可以用 Maven 管理,可以加到指定的使用者庫中
- 文件:通過 site 命令釋出各種文件資訊,包括構建過程的輸出報告,javadoc 文件等
- 專案關係:微服務模式下,一個專案通常由幾個模組組成,用 Maven 可以完美應對
Maven 生命週期
POM 專案物件模型
pom.xml 元素
每個 Maven 專案的根目錄下都有一個 pom.xml 檔案,包含各種配置資訊。Maven 用這個檔案來構建專案。其中的可配置項有:
project dependencies
plugins
goals
build profiles
project version
developers
mailing list
其中,工程組(groupId)、名稱(artifactId)和版本(version)屬性是工程的唯一標識。
根專案配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>com.kikakika.myproject-group</ groupId>
<artifactId>myproject</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>myproject_common</module>
<module>myproject_base</module>
</modules>
</project>
子模組的配置:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>myproject</artifactId>
<groupId>com.kikakika.myproject-group</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>myproject_common</artifactId>
</project>
繼承關係
每個專案根目錄下的 pom.xml 檔案可以被子專案或子模組的所繼承,從而實現儘可能少的配置。
Maven 的構建生命週期
參考:http://wiki.jikexueyuan.com/project/maven/build-life-cycle.html
使用 Maven 構建專案時,可以指定多個基本的階段,每個階段中可以使用 pre 和 post 在特定階段之前或之後執行目標:
資源拷貝-》編譯-》單元測試-》打包建立 JAR 包或 WAR 包-》整合測試-》安裝部署到本地或遠端倉庫
Maven 構建工程時,每個階段都有以下三個標準的生命週期:
- clean:清理之前的構建資訊
- default(or build):構建專案
- site:建立新的報告文件、部署站點
Maven 倉庫
參考:http://www.runoob.com/maven/maven-repositories.html
通過 Maven 獲取依賴時的順序關係:
- 現在本地倉庫查詢依賴,如果依賴存在則停止查詢
- 如果本地倉庫不存在指定的依賴,則去官方提供的中央倉庫查詢,如果找到了則停止,如果沒找到且沒有配置遠端倉庫,則報錯停止,否則去遠端倉庫查詢
- 如果在遠端倉庫找到依賴,則停止,否則報錯