面向初學者的 5 個令人興奮的 Maven 多模塊項目創意和主題 [2022]

已發表: 2021-05-27

隨著任何項目變得更加複雜和分層,管理它的正確方法是將其拆分為不同的模塊。 在 Maven 中,雖然可以將這些多個項目鏈接為依賴項,但它使構建過程變得更加複雜。 因此,首選的方法是將項目構建為多模塊,並將其餘部分傳遞給 Maven。

目錄

在 Maven 中使用多模塊的好處

使用多模塊而不是依賴注入或任何其他過程的顯著優勢是它減少了重複。 為了更好地理解這一點,假設您正在開發一個由兩個模塊組成的應用程序——比如說後端模塊和前端模塊。

如果您同時處理這兩個模塊並更改影響這兩個模塊的某些功能,則需要在沒有專門的構建工具的情況下單獨構建模塊或組件。 或者,您必須編寫腳本來編譯代碼、運行測試並顯示最終結果。

現在,如果復雜性進一步增加並且您的項目有兩個以上的模塊,那麼在沒有專門的構建工具的情況下執行此任務將變得越來越困難。 此外,在實際問題中,您的項目可能需要一些 Maven 插件來在整個構建生命週期中執行一些關鍵操作、共享依賴項或包含其他 BOM 項目。

由於這些挑戰,Maven 中的多模塊非常有用,讓您可以在單個命令行中構建應用程序的模塊。 它還允許您在多個模塊之間無縫共享大量數據和配置。

另請閱讀:Maven 面試問題解答

關於 Maven 中的多模塊項目需要了解的關鍵術語

1.父POM(項目對像模塊)

Maven 中的每個 pom.xml 文件——為了支持繼承——都有一個父 POM,稱為超級 POM。 這可以位於 Maven 二進製文件中,您還可以合併這兩個文件以創建有效 POM。

因此,您可以創建自己的 pom.xml 文件作為項目的父級。 完成後,您可以添加所有依賴項和配置,將其設置為子模塊的父級,並啟用繼承。 除了繼承,Maven 還提供聚合。 利用聚合功能的父 POM 稱為聚合 POM——這種 POM 在 pom.xml 文件中顯式聲明子模塊。

2.子模塊

子項目,也稱為子模塊,可以理解為繼承自父 POM 的標準 Maven 模塊。 使用繼承,模塊共享各種依賴項和配置。 但是,如果您需要快速構建項目,則需要在 Parent POM 中顯式聲明子模塊,使其成為聚合 POM。

3. 簡單的多模塊項目

App 和 util 是簡單多模塊項目中包含的兩個模塊。 需要 util 模塊來提供靜態方法來使用 Apache Commons Lang 庫連接或附加不同的字符串,並且 app 模塊是調用 util 模塊所必需的。 這是 app.java 文件中的一個片段:

簡單多/app/src/main/java/app/App.java

公共類應用程序{

公共靜態無效主要(字符串[]參數){

System.out.println(new App().greet(“世界!”));

}

公共字符串問候(字符串名稱){

return Util.join(“你好”,名字);

}

}

要構建項目,請運行

$ cd 簡單多

$ mvn 清潔測試

Maven 的代碼構建器以正確的順序構建項目的兩個模塊,執行必要的測試,並以易於理解的摘要格式輸出結果,如下所示:

4. 多模塊項目的結構

這是一個簡單的多模塊項目的佈局:

simple-multi 目錄是根目錄,位於整個項目的最頂部。 它包含頂級 POM(Parent POM),但這個 Parent POM 沒有任何源文件夾。

頂級目錄還包含 app 和 util,它們是帶有目錄和 pom.xml 文件的常規 Maven 項目。

頂級 POM 和模塊 POM 與常規 POM 略有不同。 讓我們詳細了解它們包含的內容:

5.頂級POM

根目錄下的 Maven 多模塊項目需要 Parent POM 或頂級 POM。

與任何普通項目一樣,頂級 POM 定義了重要方面和項目坐標,如 artifactID、版本和 groupID。 但是,它的包裝類型不是通常的 war 或 jar 格式,而是 pom。 這是因為頂級模塊不包含任何進一步的源目錄。 modules/module 元素添加了 app 和 util 模塊。

該文件的內容包括:

簡單多/ pom.xml

<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>org.codetab</groupId>

<artifactId>simple-multi</artifactId>

<版本>1.0</版本>

<包裝>pom</包裝>

<模塊>

<模塊>應用程序</模塊>

<模塊>實用程序</模塊>

</模塊>

</項目>

綜上所述,頂層 POM 指定了 pom 打包類型,並顯式列出了所有子模塊。

請記住,在 Parent POM 中聲明子模塊時,您無需擔心排序,因為 Maven 使用 Reactor 正確排序列出的模塊。 在 simple-multi 中,maven 構建 util 模塊,然後構建 app,因為 app 依賴於 util。

5.模塊POM

Module POM 文件夾包含一個常規源文件夾和它自己的 pom.xml 文件。 這個 util/pom.xml 的內容是:

實用程序/pom.xml

<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>org.codetab</groupId>

<artifactId>simple-multi</artifactId>

<版本>1.0</版本>

</父>

<artifactId>util</artifactId>

<屬性>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

</屬性>

<依賴項>

<依賴>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<版本>3.6</版本>

</依賴>

<依賴>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<版本>4.12</版本>

<scope>測試</scope>

</依賴>

</依賴>

</項目>

無需指定模塊的 groupID 和版本,因為它們將從父模塊繼承。 dependencies/dependency 塊定義了 util 模塊的依賴關係——commons-lang3 和 JUnit。

現在,讓我們看一下 app/pom.xml,它與 util/pom.xml 非常相似,除了依賴項塊,如下所示:

應用程序/pom.xml

……

<依賴項>

<依賴>

<groupId>org.codetab</groupId>

<artifactId>util</artifactId>

<版本>1.0</版本>

</依賴>

……

</依賴>

app 模塊使用來自 util 模塊的方法,為此,app/pom.xml 將 util 指定為依賴項。

總結上面解釋的所有事情:

頂層項目(父項目),

  • 定義頂層pom.xml,指定所有坐標和子模塊,並將打包類型設置為pom。
  • 包含更多模塊文件夾。
  • 不包含源文件夾。

每個模塊文件夾只不過是常規的 Maven 項目目錄。 但是, pom.xml 文件包含:

  • parent 元素指定模塊的父級。
  • 模塊坐標在 artifactID 元素中指定。 未提及 GroupID 和版本,因為它們是從父坐標繼承的。
  • 如果一個模塊依賴於另一個模塊,則依賴項將在依賴項/依賴項元素中提及。

執行多模塊項目

$ mvn clean package 命令可用於編譯、測試和打包多模塊。 但是,要使用 maven-exec-plugin 運行它需要以下步驟:

運行以下命令:

$ cd 簡單多

$ mvn 全新安裝

$ mvn exec:java -pl app -Dexec.mainClass=app.App

install 命令將模塊安裝到本地存儲庫,然後您可以在其中運行項目。 選項 -pl app 通知 exec 插件有關 app 模塊並運行其類 app.App。 如果不安裝,構建過程將失敗,因為 Maven 無法下載和解析 util 模塊依賴項。

但是,每次運行前都將項目安裝在本地存儲庫中是相當麻煩的,尤其是在開發階段。 為了緩解這種情況,您可以直接在 Eclipse IDE 中執行多模塊,而無需執行安裝步驟。

從世界頂級大學在線學習軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

我們希望本文能幫助您開始使用 Maven 多模塊流程。 與任何新事物一樣,它只是初步掌握它。 一旦您了解了基本結構和功能,您就可以在 Maven 中無縫管理多個模塊。

如果您有興趣了解有關全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的軟件開發執行 PG 計劃 – 全棧開發專業化,專為在職專業人士設計,提供 500 多個小時的嚴格培訓,9 + 項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

什麼是多模塊項目?

多模塊使您能夠將常用工件分組到單個模塊中,以減少構建和部署項目所需的模塊數量。 通過定義這些模塊之間的父子關係,可以從兩個或多個模塊構建多模塊項目。 多模塊項目的父模塊稱為根模塊。 多模塊項目的子模塊稱為子模塊。 根模塊是多模塊構建的基石。 子模塊不能單獨構建,它們必須與根模塊一起構建。

maven 中的項目對像模型文件是什麼?

項目對像模型 (POM) 文件是描述項目的文件。 它是開發人員將工件發佈到存儲庫的基本工作單元。 項目對像模型是一個簡單的文本文件,用於定義項目、列出其組件並定義它們的作用。 項目對像模型是 Maven 軟件項目管理框架的關鍵組成部分。 它是組成 Maven 項目的一種特殊類型的 XML 文檔。 一個 pom 文件可以被認為是一個項目的描述。 它告訴 Maven 項目是關於什麼的,以及項目中每個模塊的描述、它們的依賴關係和版本。 模塊是 Maven 項目的構建塊。 模塊及其依賴項用於構建最終項目。

如何創建一個maven多模塊項目?

為了製作一個 Maven 多模塊項目,您需要定義一個父 pom 並確保所有子模塊都繼承它。 同樣重要的是要注意,您還可以將所有子模塊放在一個存儲庫中,並將父 pom 指向該存儲庫。 一個 Maven 多模塊項目由一個父 pom 和一個或多個子模塊組成。 父 pom 可以定義多模塊 maven 項目元數據,如工件 Id、版本、打包和依賴項。 子模塊可以繼承父級的元數據,父級 pom 可以定義高級項目配置,例如項目的組織和描述。