1. 程式人生 > >Java 專案管理工具 - Maven

Java 專案管理工具 - Maven

類似於 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 獲取依賴時的順序關係:

  1. 現在本地倉庫查詢依賴,如果依賴存在則停止查詢
  2. 如果本地倉庫不存在指定的依賴,則去官方提供的中央倉庫查詢,如果找到了則停止,如果沒找到且沒有配置遠端倉庫,則報錯停止,否則去遠端倉庫查詢
  3. 如果在遠端倉庫找到依賴,則停止,否則報錯