Maven 快速入門

官網:https://maven.apache.org/index.html
POM 參考文檔: https://maven.apache.org/pom.html
Settings 參考文檔: https://maven.apache.org/settings.htmlhtml

1、簡介

Maven 是一個用於構建/管理任何基於Java項目的工具,其自己也是基於Java的 所以須要Java環境。其最初是爲了簡化 Jakarta Turbine 項目的構建而生。java

其主要處理如下關心的領域:web

  1. 使構建過程更簡單:使用 Maven 並不能消除對底層機制的瞭解須要,但仍能使開發者規避不少細節。
  2. 提供統一的構建系統:Maven 使用 POM(project object model,項目對象模型)和插件集構建項目。一旦你熟悉一個 Maven 項目,則會知道全部 Maven 項目的構建。
  3. 提供高質量的項目信息:Maven 提供了有用的項目信息,一部分來自 POM,一部分生成自源碼。(注:這部分不會太經常使用到,屬於 reporting 模塊,即經過調用 "mvn site",運行一個 Server,在網頁上展現項目相關信息報告,如圖所示。詳情可參考: Apache Maven Site Plugin, Configuring Reports
  4. 提供最佳的項目開發指導:Maven 意在收集當前最佳實踐開發原則,並使其變得更簡單以指導項目方向。
    例如:
    • 目前單元測試這一最佳實踐做爲了指導,單元測試的規範、執行、報告在 Maven 中做爲了一般構建聲明週期的一部分。
    • Maven 還協助項目工做流(workflow),例如發佈(release)和問題管理(issue management)。
    • Maven 在項目目錄結構的佈局上也給出了一些指導建議,一旦你熟悉了這佈局,能夠很容易遊覽其餘Maven項目。
      Maven 在項目佈局上較爲堅持,雖然 Maven 設計爲了靈活適應不一樣項目的須要,但它不可能在不影響目標的狀況下知足每一種不尋常結構的項目。所以若不能被從新組織,可能不得不放棄一些特性或Maven使用。

2、安裝

  1. 系統要求:
    • Maven 3.3+ 須要 JDK1.7
    • JAVA_HOME 環境變量確保指向了JDK目錄
  2. 下載/安裝:
    2.1 Maven 官方提供現成 binary 分發: https://maven.apache.org/download.cgi
    2.2 解壓後將 bin 目錄添加進 PATH 便可
    image

3、簡單使用

  1. 利用原型(Archetype)生成簡易項目結構:
    1.1 在 PowerShell中執行:mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=my-app" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DarchetypeVersion=1.4" "-DinteractiveMode=false"
    1.2 修改"pom.xml"添加如下內容,聲明 Java源碼版本信息
    <properties>
    	<maven.compiler.source>11</maven.compiler.source>
    	<maven.compiler.target>11</maven.compiler.target>
    </properties>
  2. 進入目錄,並打包成 jar
    cd maven-sample
    mvn package  //mvn會自動下載打包所需組件
  3. 執行測試
    java -cp .\target\maven-sample-1.0-SNAPSHOT.jar top.simpleito.demo.App

4、主要模塊/知識

1. 標準目錄佈局(Standard Directory Layout)

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
注:apache

  • 標準目錄佈局同時也是用 Maven 構建的默認值,好比哪裏是java源碼,測試目錄在哪,輸出目錄是什麼等等。
  • 如下有些描述暫時以爲模糊也不要緊,一些部分並不常見 筆者也沒用過,像 it / filters / site / assembly等,臨時有大體概念便可。
  • 從官方示例看,java 源碼包結構只要求和 groupId 相同便可,而不要求加一層 artifectId 的父包。但實際項目各類都有
maven-project
    ├───pom.xml  項目描述文件,定義在生命週期中所需的依賴和所需模塊等等
    ├───README.txt  項目說明
    ├───NOTICE.txt  項目中使用第三方庫的資料
    ├───LICENSE.txt  許可文件
    └───src  包含構建項目所需全部資料,site等等
        ├───main  最重要的目錄,全部工件(artifect)都應出如今這裏
        │   ├───java  工件Java源碼
        │   ├───resources  配置及資源等文件
        │   ├───filters  包含在構建階段將值注入到resources目錄下配置屬性的文件
        │   └───webapp  對於web應用,包含諸如JS/CSS/HTML等資源文件
        ├───test  全部測試代碼及資源
        │   ├───java
        │   ├───resources
        │   └───filters
        ├───it  一般是用於 Maven Failsafe Plugin 的集成測試
        ├───site  使用 Maven Site Plugin(https://maven.apache.org/plugins/maven-site-plugin/index.html) 建立的site文檔
        └───assembly  二進制打包裝配配置,通常也不經常使用適用 Apache Maven Assembly Plugin
    └───target  用於容納 build 的全部輸出

2. POM(Project Object Model,項目對象模型)

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
POM 是 Maven 中的基本工做單元,它是一個 XML 文件,包含了"項目有關信息"和"配置Maven構建項目的細節"。
當執行一個任務時,Maven 會在當前目錄尋找 POM 文件,從而讀取所需的配置信息。
POM 中能夠指定許多信息,包括:app

  • 依賴(dependencies)、插件(plugins) 或 可被執行的目標(goal)、構建配置(profiles)等。
  • 以及關於項目的自己的信息,如 版本(version)、說明(description)、開發人員(developers)等

需注意的是:POM 中的<groupid>:<artifactId>:<version>構成了該工件的徹底限定名
關於 POM、Super POM、最小POM等更多信息參考:Maven POM 詳解框架

3. Settings(Maven自己設置)

https://maven.apache.org/settings.html
settings.xml 包含對 Maven 自身的配置,不該綁定到任何特定項目分發給用戶。主要包含:本地儲存庫,代理,身份驗證信息等等。webapp

該配置文件可能存在兩個位置:maven

  • 全局的設置:${maven.home}/conf/settings.xml
  • 用戶級設置:${user.home}/.m2/settings.xml 【默認狀況下可能不存在,可copy全局過來修改】

若都存在,則內容將被合併做用。優先級:用戶級 > 全局
配置詳情參考:Maven Settingside

4.Build Lifecycle(構建生命週期)

https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
Maven 基於生命週期的概念,意味着構建(build)和分發(distributing)特定工件的過程得以清晰定義,意味着只需學習一小組命令,便可構建任何 Maven 項目。工具

有三種內置構建生命週期(build lifecycle):默認(default)、清理(clean)、site
需注意:

  1. 構建生命週期由構建階段(build phases)組成,每一個階段都是生命週期中的一個步驟(stage),
  2. Maven 命令格式:mvn [options] [<goal(s)>] [<phase(s)>],可按需執行某個 phase
  3. build phase 將按順序執行,例如若執行 mvn install,將會執行在此以前的全部 phase
  4. build phase 又是由聲明插件所引入的插件目標(plugin goals)組成的。
    一個 plugin goal 表明一個特定的任務(比phase更精細),它可能被綁定到零個或多各 build phase,不綁定的 plugin goal 可在 build lifecycle 以外直接自行執行

以 default 聲明週期爲例,主要包含如下 phase:完整的請參考 Lifecycle Reference

  • validate:驗證項目是否正確,全部必要信息是否提供
  • compile:編譯項目源碼
  • test:使用合適的單元測試框架測試編譯後的源碼。這些測試代碼不要求被打包或部署
  • package:將編譯後的代碼打包爲分發格式,例如 JAR
  • verify:運行繼承測試的全部檢查,以確保符合標準
  • install:將 package 安裝到 Locale Repository(本地倉儲),用做其餘項目依賴
  • deploy:將最終 package 複製到 Remote Repository(遠程倉儲)

附/參考:

相關文章
相關標籤/搜索