今天,我們將學(xué)習(xí)
生成是將源代碼文件轉(zhuǎn)換為軟件工件以在計(jì)算機(jī)上運(yùn)行的過程。此過程通常由構(gòu)建工具(控制其他程序的程序)管理。
Maven是Java項(xiàng)目中最流行的事實(shí)上的構(gòu)建和管理工具。Maven 基于項(xiàng)目對象模型 (POM) 的概念,它有助于從中心信息自動管理項(xiàng)目的生成、文檔和報(bào)告。
多年來,Maven變得非常流行,它定義了用于構(gòu)建軟件的通用接口。Maven實(shí)現(xiàn)了可以從Maven存儲庫中檢索的插件。
簡而言之,Maven是一個(gè)用于構(gòu)建和管理基于Java的項(xiàng)目的工具,使Java開發(fā)人員的工作變得更加容易。
Maven 為許多任務(wù)提供支持,包括:
從頭開始輕松構(gòu)建 Java 項(xiàng)目,無需編寫腳本
輕松添加 JAR 和項(xiàng)目依賴項(xiàng)
訪問項(xiàng)目信息,例如日志文檔、單元測試、依賴項(xiàng)列表等。
更新 JAR 和依賴項(xiàng)的中央存儲庫。
將 Java 項(xiàng)目與控制系統(tǒng)集成
當(dāng)項(xiàng)目具有許多依賴項(xiàng)或項(xiàng)目依賴項(xiàng)版本經(jīng)常更新時(shí),Maven 生成工具是理想的選擇。它也非常適合持續(xù)構(gòu)建、集成和測試,或者當(dāng)您需要從源代碼生成文檔時(shí)。
優(yōu)點(diǎn):
Maven可以通過讀取文件自動添加所有項(xiàng)目依賴項(xiàng)。pom
在文件中添加依賴項(xiàng)非常容易。pom
Maven 可以輕松地在不同的環(huán)境中啟動項(xiàng)目,而無需處理注入、構(gòu)建等。
缺點(diǎn):
Maven 必須與 IDE 的 Maven 插件一起下載
只能將現(xiàn)有依賴項(xiàng)添加到項(xiàng)目中
現(xiàn)在我們知道了Maven是什么以及它是如何工作的,讓我們了解這個(gè)構(gòu)建工具最顯著的功能。我們將在本文后面更詳細(xì)地分解這些內(nèi)容。
POM :項(xiàng)目對象模型 (POM) 文件是包含項(xiàng)目和配置信息的 XML 文件。Maven POM文件用于執(zhí)行命令。
#依賴項(xiàng)和存儲庫:依賴項(xiàng)是外部 Java 庫,而存儲庫是打包的 JAR 文件的目錄。Maven repository.
生命周期、階段和目標(biāo):構(gòu)建生命周期由多個(gè)構(gòu)建階段組成,這些階段只是一系列項(xiàng)目目標(biāo)。生成生命周期稱為 Maven 命令。
構(gòu)建配置文件:生成配置文件是一組配置值,允許您使用不同的配置進(jìn)行構(gòu)建。您可以使用配置文件的元素將構(gòu)建配置文件添加到 POM 文件。

Maven 插件
Maven可以接受各種插件來執(zhí)行任務(wù)。由于Maven的核心很小,因此插件對于利用此工具的智能至關(guān)重要。插件只是實(shí)現(xiàn)邏輯以在構(gòu)建過程中執(zhí)行各種任務(wù)的代碼。
Jar Plugin:包含創(chuàng)建 jar 的邏輯
Surefire Plugin:包含執(zhí)行單元測試的邏輯
Maven插件由作為工作單元的目標(biāo)組成。目標(biāo)是我們想要對由POM文件定義的項(xiàng)目執(zhí)行的操作。查看此圖以了解這些組件如何交互:

Maven POM
Maven 項(xiàng)目由 POM 文件(項(xiàng)目對象模型)描述,該文件是 Java 項(xiàng)目的聲明性描述。POM是一個(gè)XML文件,用于定義項(xiàng)目的唯一Maven坐標(biāo),依賴項(xiàng),所需的插件,參數(shù)等。
調(diào)用時(shí),Maven 會在當(dāng)前目錄結(jié)構(gòu)中查找 POM 文件。沒有它,將拋出錯(cuò)誤。然后,Maven讀取POM,收集配置信息并執(zhí)行目標(biāo)。
可以在 POM 中指定的一些配置包括項(xiàng)目依賴項(xiàng)、可以執(zhí)行的插件或目標(biāo)、構(gòu)建配置文件等。
您還可以指定其他信息,例如項(xiàng)目版本、描述、開發(fā)人員和郵件列表。
讓我們看一下 POM 文件的最小版本。
<project>
? ? <modelVersion>4.0.0</modelVersion>
? ? <groupId>io.datajek</groupId>
? ? <artifactId>empty-project</artifactId>
? ? <version>1</version>
</project>
該文件包含最少的項(xiàng)目描述,沒有依賴項(xiàng)或插件。如果在包含上述 POM 文件的目錄中運(yùn)行,您將看到成功的生成。mvn install
我們有幾個(gè)元素用于創(chuàng)建此文件:
項(xiàng)目:新項(xiàng)目的根元素
型號我們建議使用 4.0.0 版版本
組標(biāo)識:這是項(xiàng)目組的唯一 ID
artifactId:這給出了一個(gè)項(xiàng)目名稱
版本:保存項(xiàng)目的版本號
其他元素包括依賴項(xiàng)、名稱、范圍和打包。
Maven 支持構(gòu)建生命周期,這是一組用于構(gòu)建項(xiàng)目的有序操作。構(gòu)建生命周期由構(gòu)建階段組成,每個(gè)階段都有插件目標(biāo),這些目標(biāo)在階段執(zhí)行時(shí)執(zhí)行。
為了更好地理解這一點(diǎn),讓我們看一個(gè)例子。干凈的生命周期包括:
pre-clean
clean
post-clean
生命周期的各個(gè)階段按順序執(zhí)行,這意味著將首先執(zhí)行、執(zhí)行第二個(gè)階段,最后執(zhí)行。pre-cleancleanpost-clean
如果我們使用 在 EmptyProject 中運(yùn)行清理階段,我們可以使用該命令指定階段。當(dāng)我們執(zhí)行該階段時(shí),如果前一階段有任何插件目標(biāo),它也將執(zhí)行。mvn cleanmvnclean
Maven 中的存儲庫包含構(gòu)建工件和依賴項(xiàng)。在軟件開發(fā)中,工件是指在過程中生成的對象,如設(shè)計(jì)文檔、數(shù)據(jù)模型和工作流圖。
Maven存儲庫有兩種主要類型:
本地存儲庫:Maven 運(yùn)行并捕獲遠(yuǎn)程下載的目錄
遠(yuǎn)程存儲庫:任何其他類型的存儲庫。例如,由第三方設(shè)置的存儲庫或公司內(nèi)的 HTTP 服務(wù)器。
一般來說,除了清理之外,本地存儲庫可以單獨(dú)保留。您將需要下載遠(yuǎn)程存儲庫,這些存儲庫在聲明依賴項(xiàng)時(shí)觸發(fā)。
默認(rèn)情況下,Maven 將從中央存儲庫下載。
下載Maven非常容易。首先驗(yàn)證您是否安裝了 Java。檢查是否設(shè)置了 Java 環(huán)境變量。從那里,從官方網(wǎng)站下載Maven。
您可以從系統(tǒng)中的任何位置解壓縮 zip,并將 bin 目錄添加到 PATH 環(huán)境變量和系統(tǒng)變量中。
從那里,然后運(yùn)行命令。正確的安裝將打印以下行:cmdmvm -v

接下來要學(xué)習(xí)的高級 Maven 概念
您現(xiàn)在應(yīng)該對Maven是什么以及如何在Java項(xiàng)目中使用它有一個(gè)深刻的了解。Maven 可以使您的構(gòu)建過程更加輕松,并自動執(zhí)行耗時(shí)的任務(wù)。但是Maven還可以為您提供更多。
接下來您應(yīng)該學(xué)習(xí)的高級Maven概念是:
Maven 中的依賴關(guān)系管理和作用域
插件管理
梅文超級聚甲醛
Maven 中的聚合
要開始使用這些高級概念并更多地練習(xí)我們今天所學(xué)的知識,請查看 Educateative 的課程使用 Maven 構(gòu)建 Java 項(xiàng)目。這個(gè)獨(dú)特的課程提供了易于遵循的動手瀏覽器內(nèi)練習(xí),以教授 Maven 概念,如插件、目標(biāo)、依賴項(xiàng)等。