Apache Maven 概述

2022-08-30 11:21 更新

Maven 是什么?

Maven 是一個(gè)項(xiàng)目管理和整合工具。Maven 為開發(fā)者提供了一套完整的構(gòu)建生命周期框架。開發(fā)團(tuán)隊(duì)幾乎不用花多少時(shí)間就能夠自動(dòng)完成工程的基礎(chǔ)構(gòu)建配置,因?yàn)?Maven 使用了一個(gè)標(biāo)準(zhǔn)的目錄結(jié)構(gòu)和一個(gè)默認(rèn)的構(gòu)建生命周期。

在有多個(gè)開發(fā)團(tuán)隊(duì)環(huán)境的情況下,Maven 能夠在很短的時(shí)間內(nèi)使得每項(xiàng)工作都按照標(biāo)準(zhǔn)進(jìn)行。因?yàn)榇蟛糠值墓こ膛渲貌僮鞫挤浅:?jiǎn)單并且可復(fù)用,在創(chuàng)建報(bào)告、檢查、構(gòu)建和測(cè)試自動(dòng)配置時(shí),Maven 可以讓開發(fā)者的工作變得更簡(jiǎn)單。

Maven 能夠幫助開發(fā)者完成以下工作:

  • 構(gòu)建項(xiàng)目
  • 文檔生成
  • 報(bào)告生成
  • 依賴管理
  • SCMs(SCMS-T是一種著作權(quán)保護(hù)技術(shù),叫串行拷貝管理系統(tǒng)。全稱是Serial Copy Management System。)

  • 發(fā)布項(xiàng)目
  • 分發(fā)
  • 郵件列表

總的來說,Maven 簡(jiǎn)化了工程的構(gòu)建過程,并對(duì)其標(biāo)準(zhǔn)化。它無縫銜接了編譯、發(fā)布、文檔生成、團(tuán)隊(duì)合作和其他任務(wù)。Maven 提高了重用性,負(fù)責(zé)了大部分構(gòu)建相關(guān)的任務(wù)。


Maven 的歷史

Maven 最初是在 Jakarta Turbine 項(xiàng)目中為了簡(jiǎn)化構(gòu)建過程而設(shè)計(jì)的。項(xiàng)目中有幾個(gè)子工程,每個(gè)工程包含稍有不同的 Ant build文件(ant,一種項(xiàng)目構(gòu)建工具)。JAR 文件使用 CVS 管理。

Apache 小組隨后開發(fā)了 Maven,能夠同時(shí)構(gòu)建多個(gè)工程、發(fā)布工程信息、部署工程、在幾個(gè)工程中共享 JAR 文件,并且協(xié)助團(tuán)隊(duì)合作。


Maven 的目標(biāo)

Maven 的主要目的是為開發(fā)者提供:

  • 一個(gè)可復(fù)用、可維護(hù)、更易理解的工程綜合模型
  • 與這個(gè)模型交互的插件或者工具

Maven 工程結(jié)構(gòu)和內(nèi)容被定義在一個(gè) xml 文件中 - pom.xml,是 Project Object Model (POM) 的簡(jiǎn)稱,此文件是整個(gè) Maven 系統(tǒng)的基礎(chǔ)組件。詳細(xì)內(nèi)容請(qǐng)參考 Maven POM 部分。


約定優(yōu)于配置

Maven 使用約定而不是配置,意味著開發(fā)者不需要再自己創(chuàng)建構(gòu)建過程。

開發(fā)者不需要再關(guān)心每一個(gè)配置細(xì)節(jié)。Maven 為工程提供了合理的默認(rèn)行為。當(dāng)創(chuàng)建 Maven 工程時(shí),Maven 會(huì)創(chuàng)建默認(rèn)的工程結(jié)構(gòu)。開發(fā)者只需要合理的放置文件,而在 pom.xml 中不再需要定義任何配置。

舉例說明,下面的表格展示了工程源碼文件、資源文件的默認(rèn)配置,和其他一些配置。假定 ${basedir} 表示工程目錄:

配置項(xiàng) 默認(rèn)值
存放pom.xml和所有的子目錄 ?${basedir}
項(xiàng)目的java源代碼 ?${basedir}/src/main/java?
項(xiàng)目的資源文件,比如一些配置文件,如srpingmvc.xml ?${basedir}/src/main/resources?
項(xiàng)目的測(cè)試類,比如Junit代碼 ?${basedir}/src/test/java?
測(cè)試用的資源 ?${basedir}/src/test/resources?
web應(yīng)用文件目錄,web項(xiàng)目的信息,比如存放web.xml、本地圖片、jsp視圖頁面 ??${basedir}/src/main/webapp/WEB-INF?
打包輸出目錄 ?${basedir}/target?
編譯輸出目錄 ?${basedir}/target/classes?
測(cè)試編譯輸出目錄 ?${basedir}/target/test-classes?
以下是一個(gè)maven項(xiàng)目的文件結(jié)構(gòu)示例:


為了構(gòu)建工程,Maven 為開發(fā)者提供了選項(xiàng)來配置生命周期目標(biāo)和工程依賴(依賴于 Maven 的插件擴(kuò)展功能和默認(rèn)的約定)。大部分的工程管理和構(gòu)建相關(guān)的任務(wù)是由 Maven 插件完成的。

開發(fā)人員不需要了解每個(gè)插件是如何工作的,就能夠構(gòu)建任何給定的 Maven 工程。詳細(xì)內(nèi)容請(qǐng)參考 Maven 插件部分。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)