亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于maven中多個子模塊的構(gòu)建順序

 更新時間:2021年09月22日 14:56:44   作者:落魄的小開發(fā)  
這篇文章主要介紹了maven中多個子模塊的構(gòu)建順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

maven多個子模塊的構(gòu)建順序

在實際的項目開發(fā)中,為了更好的組織項目代碼,會采用分層架構(gòu)的方式,這就會使用到maven的多模塊特性。

假設(shè)項目分為A、B、C、D四層,在父模塊的pom.xml中,一般這樣來對子模塊進行聚合

<modules>
    <module>A</module>
    <module>B</module>
    <module>C</module>
    <module>D</module>
</modules>

假設(shè)各個子模塊間,配置的相互依賴關(guān)系如下:

A 依賴 B
B 依賴 C
D 依賴 A

構(gòu)建父模塊,我們能夠看到以下輸出:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] C
[INFO] B
[INFO] A
[INFO] D
[INFO]
[INFO] ------------------------------------------------------------------------

這是因為子模塊的構(gòu)建順序受兩個因素影響

  • 1、父模塊中各子模塊的聲明次序
  • 2、子模塊間的依賴關(guān)系

實際的構(gòu)建順序是這樣形成的

maven按照次序讀取pom,如果該pom沒有依賴其他子模塊,就構(gòu)建該模塊,否則就構(gòu)建其依賴的模塊,如果該依賴模塊還依賴于其他的模塊,那么就進一步構(gòu)建依賴的依賴。

在示例中,A模塊依賴B,而B模塊又依賴C,因此要先構(gòu)建C,再構(gòu)建B,然后才能構(gòu)建A。而D依賴的模塊A已經(jīng)構(gòu)建了,因此直接構(gòu)建它。

模塊間的依賴關(guān)系會將反應(yīng)堆(Reactor)構(gòu)成一個有向非循環(huán)圖,各個模塊是該圖的節(jié)點,依賴關(guān)系構(gòu)成了有向邊。這個圖不允許出現(xiàn)循環(huán)。如果A依賴B,B又依賴A,這樣就產(chǎn)生了循環(huán)依賴,Maven會報錯。

maven中的構(gòu)建

1.什么是構(gòu)建

構(gòu)建并不是創(chuàng)建,創(chuàng)建一個工程并不等于構(gòu)建一個項目。要了解構(gòu)建的含義我們應(yīng)該由淺入深的從 以下三個層面來看:

(1)純 Java 代碼 (編譯)

大家都知道,我們 Java 是一門編譯型語言,.java 擴展名的源文件需要編譯成.class 擴展名的字節(jié)碼 文件才能夠執(zhí)行。所以編寫任何 Java 代碼想要執(zhí)行的話就必須經(jīng)過編譯得到對應(yīng)的.class 文件。

(2)Web 工程 (部署)

當(dāng)我們需要通過瀏覽器訪問 Java 程序時就必須將包含 Java 程序的 Web 工程編譯的結(jié)果“拿”到服務(wù) 器上的指定目錄下,并啟動服務(wù)器才行。這個“拿”的過程我們叫部署。我們可以將未編譯的 Web 工程比喻為一只生的雞,編譯好的 Web 工程是一只煮熟的雞,編譯部署 的過程就是將雞燉熟。

注意: 開發(fā)過程中使用路徑或配置文件中配置的類路徑等都是以編譯結(jié)果的文件結(jié)構(gòu)為標準。

(3)實際項目

在實際項目中整合第三方框架,Web 工程中除了 Java 程序和 JSP 頁面、圖片等靜態(tài)資源之外,還 包括第三方框架的 jar 包以及各種各樣的配置文件。所有這些資源都必須按照正確的目錄結(jié)構(gòu)部署到服 務(wù)器上,項目才可以運行。

所以綜上所述:構(gòu)建就是以我們編寫的 Java 代碼、框架配置文件、國際化等其他資源文件、JSP 頁 面和圖片等靜態(tài)資源作為“原材料”,去“生產(chǎn)”出一個可以運行的項目的過程。

2.構(gòu)建過程的幾個主要環(huán)節(jié)

  • (1)清理:刪除以前的編譯結(jié)果,為重新編譯做好準備。
  • (2)編譯:將 Java 源程序編譯為字節(jié)碼文件。
  • (3)測試:針對項目中的關(guān)鍵點進行測試,確保項目在迭代開發(fā)過程中關(guān)鍵點的正確性。
  • (4)報告:在每一次測試后以標準的格式記錄和展示測試結(jié)果。
  • (5)打包:將一個包含諸多文件的工程封裝為一個壓縮文件用于安裝或部署。Java 工程對應(yīng) jar 包,Web 工程對應(yīng) war 包。
  • (6)安裝:在 Maven 環(huán)境下特指將打包的結(jié)果——jar 包或 war 包安裝到本地倉庫中。
  • (7)部署:將打包的結(jié)果部署到遠程倉庫或?qū)?war 包部署到服務(wù)器上運行。

3.自動化構(gòu)建

其實上述環(huán)節(jié)我們在 Eclipse 中都可以找到對應(yīng)的操作,只是不太標準。那么既然 IDE 已經(jīng)可以進 行構(gòu)建了我們?yōu)槭裁催€要使用 Maven 這樣的構(gòu)建工具呢?

我們來看一個小故事了解一下:

這是陽光明媚的一天。托馬斯向往常一樣早早的來到了公司,沖好一杯咖啡,進入了自己的郵箱——很 不幸,QA 小組發(fā)來了一封郵件,報告了他昨天提交的模塊的測試結(jié)果——有 BUG?!昂冒桑凑膊皇堑谝?次”,托馬斯搖搖頭,進入 IDE,運行自己的程序,編譯、打包、部署到服務(wù)器上,然后按照郵件中的操作 路徑進行測試?!班?,沒錯,這個地方確實有問題”,托馬斯說道。于是托馬斯開始嘗試修復(fù)這個 BUG,當(dāng)他 差不多有眉目的時候已經(jīng)到了午飯時間。 下午繼續(xù)工作。BUG 很快被修正了,接著托馬斯對模塊重新進行了編譯、打包、部署,測試之后確認沒 有問題了,回復(fù)了 QA 小組的郵件。 一天就這樣過去了,明媚的陽光化作了美麗的晚霞,托馬斯卻覺得生活并不像晚霞那樣美好啊。

讓我們來梳理一下托馬斯這一天中的工作內(nèi)容

在這里插入圖片描述

從中我們發(fā)現(xiàn),托馬斯的很大一部分時間花在了“編譯、打包、部署、測試”這些程式化的工作上 面,而真正需要由“人”的智慧實現(xiàn)的分析問題和編碼卻只占了很少一部分。

在這里插入圖片描述

能否將這些程式化的工作交給機器自動完成呢?——當(dāng)然可以!這就是自動化構(gòu)建。

在這里插入圖片描述

此時 Maven 的意義就體現(xiàn)出來了,它可以自動的從構(gòu)建過程的起點一直執(zhí)行到終點:

在這里插入圖片描述

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中double保留兩位小數(shù)的多種方法

    Java中double保留兩位小數(shù)的多種方法

    這篇文章主要給大家介紹了關(guān)于Java中double保留兩位小數(shù)的多種方法,對于double數(shù)據(jù)類型進行計算發(fā)生的精度丟失的情況,可以按照自己的需求選擇任意方式,需要的朋友可以參考下
    2023-07-07
  • Java驗證時間格式是否正確方法類項目實戰(zhàn)

    Java驗證時間格式是否正確方法類項目實戰(zhàn)

    在很多場景中我們需要驗證時間日期的是否屬于正確的格式,驗證時間是否符合常規(guī)的,本文就來介紹一下幾種方式,感興趣的可以了解一下
    2022-04-04
  • idea的spring boot項目實現(xiàn)更改端口號操作

    idea的spring boot項目實現(xiàn)更改端口號操作

    這篇文章主要介紹了idea的spring boot項目實現(xiàn)更改端口號操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java的ConcurrentHashMap中不能存儲null的原因解析

    Java的ConcurrentHashMap中不能存儲null的原因解析

    眾所周知,在Java中Map可以存儲null,而ConcurrentHashMap不能存儲null值,那么為什么呢?今天通過源碼分析給大家詳細解讀,感興趣的朋友一起看看吧
    2022-07-07
  • Spring中的@ConfigurationProperties詳解

    Spring中的@ConfigurationProperties詳解

    這篇文章主要介紹了Spring中的@ConfigurationProperties詳解,ConfigurationProperties注解主要用于將外部配置文件配置的屬性填充到這個Spring Bean實例中,需要的朋友可以參考下
    2023-09-09
  • Java報錯:java.util.concurrent.ExecutionException的解決辦法

    Java報錯:java.util.concurrent.ExecutionException的解決辦法

    在Java并發(fā)編程中,我們經(jīng)常使用java.util.concurrent包提供的工具來管理和協(xié)調(diào)多個線程的執(zhí)行,va并發(fā)編程中,然而,在使用這些工具時,可能會遇到各種各樣的異常,其中之一就是java.util.concurrent.ExecutionException,本文將詳細分析這種異常的背景、可能的原因
    2024-09-09
  • SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載

    SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載

    這篇文章主要為大家介紹了SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java內(nèi)存結(jié)構(gòu)和數(shù)據(jù)類型

    Java內(nèi)存結(jié)構(gòu)和數(shù)據(jù)類型

    本文重點給大家介紹java內(nèi)存結(jié)構(gòu)和數(shù)據(jù)類型知識,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2016-12-12
  • 數(shù)據(jù)庫CURD必備搭檔mybatis?plus詳解

    數(shù)據(jù)庫CURD必備搭檔mybatis?plus詳解

    這篇文章主要為大家介紹了數(shù)據(jù)庫CURD必備搭檔mybatis?plus詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Sa-Token記住我模式實現(xiàn)七天免登錄

    Sa-Token記住我模式實現(xiàn)七天免登錄

    這篇文章主要為大家介紹了Sa-Token記住我模式實現(xiàn)七天免登錄示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論