1. 程式人生 > >Maven權威指南(續)之多模組專案構建及POM優化

Maven權威指南(續)之多模組專案構建及POM優化

  在《Maven權威指南》部分I中,第6、7章介紹了多模組專案及多模組企業級專案的構建思想。對於多模組的情況,無論是簡單的或是企業級的,對於POM來說,重點就是分析處理好父POM與子POM之間的關係,包括依賴管理(DependencyManagement)、外掛管理(PluginManagement)、兄弟模組直接的依賴關係。

  對於多模組專案,首先要注意的就是在POM中標明父子關係。在父POM中,標明專案的座標,包括artifactId,groupId及version資訊;用<modules><module></module></modules>標籤宣告包括的子模組,module中的名稱應與子POM中的artifcatId相對應。在子POM中除了定義本模組的<artifactId>,也要通過<parent>指明關聯的父POM是哪一個。其次,對於父POM的packaging屬性已不像之前章節中介紹的為jar,或war、ear等,而是pom。對於子模組生成的包,由子模組的packaging屬性說明本模組要打包的型別。

  上面的部分是為了說明多模組專案的父子關係,子模組中要用到的外掛,依賴與前面章節說明的沒有什麼區別,所以這裡就說一下對於多模組專案,尤其是有子模組相互依賴的情況下,POM的優化管理。

  隨著功能的不斷壯大,一個模組牽扯的依賴、外掛會越來越多,再有外掛和依賴的版本也會發生變化,隨之而來的問題就是POM中可能有重複使用的外掛和依賴,或需要修改外掛和依賴的版本,同一個外掛用到的地方越多需要修改的地方也就越多,往往會遺漏,就會導致之後執行某一步的時候發生錯誤,這時候檢查起來就比較費時費力且低效了。

  對於依賴(Dependency),我們可以優化的情況有依賴重複、兄弟依賴。Maven提供了DependencyManagement的方式,將重複的部分上提至父POM中的dependencyManagement片段進行統一管理以預防依賴重複的發生。首先,找出在模組間被用於一個以上模組的依賴,上移植後需要為每個子POM移除這些依賴的版本,否則子模組中的version會覆蓋父POM中宣告的版本。如果依賴中包含了排除配置,在子POM中可忽略排除配置了。再有依賴重複的情況就是兩個不同的依賴所用的版本是相同的,例如hibernate-annotation和hibernate-common-annotations,這兩個依賴的版本都為3.3.0.ga。我們可以將版本提取出來以property變數的形式定義,在dependency中引用,從而達到減少修改次數的目的。對於兄弟依賴,即一個子模組可能依賴其他一個或一個以上的子模組,子模組版本的變化也會影響依賴於此模組的模組構建。為了統一,且由於子模組的groupId及version是統一的,所以對於兄弟模組之間的依賴,通過引用內建的groupId和version進行定義,即${project.groupId}和${project.version}。

  對於外掛(Plugin),與dependency有類似的情況。同一外掛在多個模組中重複使用時,可用PluginManagement標籤在父POM中統一管理。由於外掛中可能包含對依賴的引用,若依賴被多次引用。例如hibernate3外掛依賴了hsqldb,並在simple-command和simple-webapp中引用,但在上面提到的DependencyManagement中不支援對外掛依賴的管理。我們使用屬性定義的方式來固化hsqldb的version,就像在java中定義一個靜態常量,直接引用,需要修改的時候只修改一次。

  最後指南中又說明了如何通過dependency外掛分析是否所有的依賴、外掛被顯示的宣告,以防止在發生版本變化的時候發生編譯或安裝錯誤。

  寫的有點兒亂,我總結一下吧。基本的思想分為3點吧。

1. 把在多個地方用到的同一東西抽取出來放入父POM進行管理;

2. 對於相同version的依賴,用property屬性進行統一定義,在外掛、依賴中進行引用;

3. 經常通過Dependency外掛對POM進行分析,做到POM的更新與專案實際情況保持一致,才能達到提高生產效率的目的。:)

  這次先寫到這裡,由於指南中的程式碼很全,我就沒有貼上來,建議大家對照著看,很清楚的。謝謝觀賞,之後進入Maven具體參考部分,敬請期待,呵呵。

相關推薦

Maven權威指南模組專案構建POM優化

  在《Maven權威指南》部分I中,第6、7章介紹了多模組專案及多模組企業級專案的構建思想。對於多模組的情況,無論是簡單的或是企業級的,對於POM來說,重點就是分析處理好父POM與子POM之間的關係,包括依賴管理(DependencyManagement)、外掛管理(Plu

symfony權威指南3symfony配置

在開始閱讀本文之前建議先閱讀筆者之前的一篇博文 yaml檔案的語法及注意事項,瞭解一些關於yaml方面的相關知識。 第一次接觸symfony的人可能會不太習慣symfony的配置檔案,因為symfony的配置檔案實在是太多了,而且還分了很多的層級,不過相信隨著後期學習的深

Maven入門指南

deploy ... web服務器 快速 repos 必須 轉載 關於 net 轉載自並發編程網 – ifeve.com本文鏈接地址: Maven入門指南(二) Maven目錄結構 Maven有一個標準的目錄結構。如果你在項目中遵循Maven的目錄結構,就無需在pom文件中

讀書筆記--Android Gradle權威指南

說了 聲明 通過命令 google robot 結構 信息 我只 cati 最近看了一本書《Android Gradle 權威指南》,對於 Gradle 理解又更深了,但不想過段時間就又忘光了,所以打算寫一篇讀書筆記,將書中一些我個人覺得蠻有用的點記錄、總結一下。 前言 首

2018-08-28微服務筆記執行緒

1.多執行緒 1.1 程序與執行緒 (1)程序:正在執行的程式,是執行緒的集合。主執行緒決定程式碼的執行順序。 (2)執行緒:正在獨立執行的一條執行路徑。 (3)多執行緒:為了提高程式的效率。 1.2 四種方式建立執行緒 (1)繼承Thread類 (2)實現Runnable介面

Python 執行緒、程序 執行緒、同步、通訊

Python 多執行緒、多程序 (一)之 原始碼執行流程、GIL Python 多執行緒、多程序 (二)之 多執行緒、同步、通訊 Python 多執行緒、多程序 (三)之 執行緒程序對比、多執行緒 一、python多執行緒 對於I/O操作的時候,程序與執行緒的效能差別不大,甚至由於執行緒更輕量級,效能更高

Android程式設計權威指南3ed挑戰練習遇到的問題

第十二章,練習2,將DatePickerFragment用Activity託管,程式碼寫的和網上的論壇上的幾乎一樣,就是在點選日期button時,顯示“很抱歉,CriminalIntent無響應”,然後應用退出。開始以為是和書上的程式碼不一樣,版本不一樣,資料庫操作之類的問題,後來把書上本章節的程式碼和論壇

Maven入門指南

原文連結  譯文連結  譯者:nkcoder  校對:方騰飛 Maven介紹: Maven是一個強大的Java專案構建工具。當然,你也可以使用其它工具來構建專案,但由於Maven是用Java開發的,因此Maven被更多的用於Java專案中。 這篇教程的目的是幫助你理解Maven的工作機制。因此

Python 執行緒、程序 執行緒、同步、通訊

一、python多執行緒 對於I/O操作的時候,程序與執行緒的效能差別不大,甚至由於執行緒更輕量級,效能更高。這裡的I/O包括網路I/O和檔案I/O 1、例項 假如利用socket傳送http請求,也就是網路I/O。爬取列表網頁中的寫href連結,然後獲取href連結之後,在爬去連結的網頁詳情。 如果不適用

【配置阿里雲 II】xampp站點配置設定虛擬域名頂替預設載入dashboard修改方式

在xampp環境中,為了方便的管理多個專案,需要通過配置相關檔案來設定多個虛擬站點。        如果不配置虛擬埠,專案上線會發生如下情況:        在域名繫結ip後(應用程式池中網站也設定好指向),dns解析沒問題情況下 但是本地瀏覽器訪問時用域名+專案名訪問時

基於maven使用IDEA搭建和部署SpringBoot模組專案Multi-Module

What matters in life is not what happens to you but what you remember and how you remember it. 生命中真正重要的不是你遭遇了什麼,而是你記住了哪些事,又是如

javascript權威指南6隨筆

        包裝物件:存取字串、數字或布林值的屬性時,建立的臨時物件稱作包裝物件。它只是偶爾用來區分 字串值和字串物件,數值和數值物件,布林值和布林物件。通常,包裝物件只是被看做是一種實現細節,而不用特別關注。由於字串、數值、布林值的屬性都只

TensorFlow執行緒

本博文參考TensorFlow實戰Google深度學習框架(鄭澤宇,顧思宇),僅用作學習 一、TFRecord輸入資料格式 TFRecord是tensorflow中儲存資料的統一格式。可以統一不同的原始資料格式,並更加有效地管理不同的屬性。TFRecord檔案中的資料都是通

css權威指南8:內邊距、邊框和外邊距

寬度和高度 1.一個元素的width被定義為從做內邊界到右內邊界的距離,height被定義為上邊界到下邊界的距離。 2.這兩個屬性很重要的一點是:它們不能應用到行內非替換元素。 3.如果在行內非替

WinPcap權威指南:UDP與DNS欺騙

       上一節介紹了ARP協議之後,群裡面有朋友說ARP欺騙不是很簡單麼?實際上,實現ARP欺騙是很簡單的,難點在於資料轉發的速度。2004年我們做隔山打牛的時候,曾經去過一家網咖測試,剛開始是開了ARP欺騙幾分鐘就大量主機掉線,客人罵聲一片(幸好是朋友的網咖,

Java執行緒知識點總結——進階篇執行緒下的單例模式

餓漢式 餓漢式多執行緒和單執行緒的程式碼是一樣的,如下: class Single { private static final Single s = new Single(); p

Linux效能調優指南翻譯Linux程序管理

本文為IBM RedBook的Linux Performanceand Tuning Guidelines的1.1節的翻譯原文地址:http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf原文作者:Eduardo Cili

css權威指南10:浮動和定位

浮動 float 值:left | right | none | inherit 1.css允許浮動任何元素 浮動元素 1.會以某種方式將浮動元素從文件的正常流中刪除,不過它還是會影響佈局 2

SpringCloud零基礎上手——SpringBoot模組maven專案

本篇接著上一篇的內容,我們要寫一個服務生產者,向Eureka註冊中心註冊服務。為了後面的內容順利進行,我們建立一個多模組的專案。 編寫一個登陸微服務pf-login,並註冊到Eureka,先看我建立完的目錄結構: 簡單分析一下,最外層是pf-login,

RecyclerView的使用2Item佈局的載入

上一篇介紹的了RecyclerView的基礎使用http://blog.csdn.net/leejizhou/article/details/50670657,這一篇給大家介紹下如何利用RecyclerView實現多Item佈局的載入,多Item佈局的載入的