亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Maven(5)-優化和重構POM

2019-11-14 15:20:38
字體:
來源:轉載
供稿:網友

 本文主要介紹如何優化pom,杜絕重復(DRY)。

    1)模塊重復依賴;

    2)坐標版本號重復;

    3)兄弟依賴

 

一、項目骨架

上圖說明:

  1. multi-module-PRoject是一個有多個模塊構成的項目,模塊分別為:web-service、web-app、web-dal
  2. web-service、web-app、web-dal分別依賴與log4j
  3. web-app同時依賴web-service和web-dal,因為這三個模塊屬于同一個project,所以這種依賴叫做兄弟依賴。

 二、模塊重復依賴

2.1 問題

由于三個模塊同時依賴與log4j組件,如果在web-service,web-app,以及web-dal的pom文件中分別都加入對log4j的依賴(首先,這是可以的)就會出現一個問題:當log4j有新的版本出現,且自己的項目想引入這個新版本,由于每個模塊都配置了對log4j的依賴,那么就需要在每個模塊的pom文件中進行修改,工作量很大,且如果模塊多,類似的重復依賴也多,就容易出現有些模塊漏修改的問題,容易產生問題。

該問題就猶如有很多重復代碼大量存在于不同的模塊,當有針對這塊重復代碼邏輯修改的時候,就需要大量的人力去到處修改,且容易出錯。怎么辦?代碼中的問題可以通過把這個重復代碼單獨封裝,然后多出進行調用。這樣有需求變動時只需要修改一個地方即可。

2.2 解決方案

maven的pom文件優化類似,maven中可以將這些子模塊中相同的依賴移到父模塊的dependencyManagement節點。

最佳實踐:如果有兩個以上的子模塊共同依賴一個組件,那么對于這個組建的依賴就應該放在父模塊的dependencyManagement節點

<?xml version="1.0" encoding="UTF-8"?><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>com.VEVb.kmpp</groupId>    <artifactId>multi-module</artifactId>    <packaging>pom</packaging>    <version>1.0-SNAPSHOT</version>    <modules>        <module>web-app</module>        <module>web-service</module>        <module>web-dal</module>    </modules><dependencyManagement>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>    </dependencies></dependencyManagement></project>

 當然如果將依賴移到父模塊的dependencyManagement模塊后,需要在子模塊中將對應的依賴刪除,否則,子模塊的配置會覆蓋父模塊的配置。

三、版本號重復

3.1 問題演示

 <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-annotations</artifactId>            <version>3.3.0.ga</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-commons-annotations</artifactId>            <version>3.3.0.ga</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate</artifactId>             <version>3.2.5.ga</version>        </dependency>    </dependencies>

 上面的pom配置中作為org.hibernate下面的組件,版本號重復了,一般來說,一個組織(groupid)下面的組件的版本號是一致的,且一起更新,和上面說的多個模塊重復依賴一個組件類型,當同一個版本號多處出現時,如果修改,就會出現工作量大且有漏修改的風險。

3.2 解決

使用屬性元素(property),統一定義版本號,多處進行使用:

<properties>    <hibernate.annotations.version>3.3.0.ga</hibernate.annotations.version></properties><dependencyManagement>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-annotations</artifactId>            <version>${hibernate.annotations.version}</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-commons-annotations</artifactId>            <version>${hibernate.annotations.version}</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate</artifactId>            <version>${hibernate.annotations.version}</version>        </dependency>    </dependencies></dependencyManagement>

 

這樣當org.hibernate的版本號變化的時候只需要修改以地方。其實版本號類似于程序里面的magic number。不管是不是多次使用,最好都通過定義property來實現,上面的junit的版本號也應該預先在property中進行定義,然后再使用。

四、兄弟依賴

4.1 問題

web-app依賴web-dal和web-service組件

        <dependency>            <groupId>com.VEVb.kmpp</groupId>            <artifactId>web-service</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>com.VEVb.kmpp</groupId>            <artifactId>web-dal</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>

 上面的依賴同樣有重復:groupId和version。

4.2 解決

因為web-app、web-dal以及web-service作為兄弟模塊他們的groupId和version是和父模塊是一樣的。所以兄弟依賴的groupId和version可以使用父模塊的數據:

   <dependency>            <groupId>${parent.groupId}</groupId>            <artifactId>web-service</artifactId>            <version>${parent.version}</version>        </dependency>        <dependency>            <groupId>${parent.groupId}</groupId>            <artifactId>web-dal</artifactId>            <version>${parent.version}</version>        </dependency>

 當然,兄弟依賴的重復也可以通過property來定義解決,但是沒有直接使用父模塊屬性方便。

五、maven 依賴分析

maven已經提供了命令:

  1. mvn dependency:analyze,使用該命令就可以看到maven分析的結果和建議
  2. mvn dependency:tree,使用該命令可以看到maven的依賴樹。

六、結束語

DRY works everywhere and always will do.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色视频日本版| 中文字幕欧美精品在线| 国产999精品久久久影片官网| 国产精品极品美女粉嫩高清在线| 日韩欧美在线观看| 色与欲影视天天看综合网| 欧美激情一级精品国产| 亚洲国产欧美一区二区三区久久| 日韩高清电影好看的电视剧电影| 午夜精品福利视频| 欧美巨大黑人极品精男| 日韩国产欧美精品一区二区三区| 亚洲第一色中文字幕| 91精品久久久久久久久久入口| 亚洲午夜国产成人av电影男同| 丝袜情趣国产精品| 国产精品免费久久久久影院| 日本高清+成人网在线观看| 欧美日韩不卡合集视频| 久热精品视频在线| 国内偷自视频区视频综合| 亚洲精品国产综合区久久久久久久| 国产精品成人一区二区三区吃奶| 国产精品免费久久久久影院| 国产成人精品免高潮在线观看| 亚洲级视频在线观看免费1级| 欧美小视频在线观看| 日韩欧美中文第一页| 57pao精品| 亚洲电影免费观看高清完整版| 亚洲香蕉成人av网站在线观看| 国产激情久久久久| 国产精品美女视频网站| 欧美激情一级欧美精品| 一本大道亚洲视频| 在线性视频日韩欧美| 精品中文字幕视频| 久久久日本电影| 国产精品久久久久久久久久久久久| 亚洲色图色老头| 亚洲精品久久久久久久久久久久久| 亚洲免费视频在线观看| 91av在线国产| 欧美另类极品videosbestfree| 欧美另类老女人| 中文字幕自拍vr一区二区三区| 国产午夜精品免费一区二区三区| 日本国产精品视频| 成人黄色短视频在线观看| 日韩欧美国产激情| 日韩电视剧免费观看网站| 综合av色偷偷网| 国产亚洲日本欧美韩国| 一区二区三区四区在线观看视频| 亚洲最大中文字幕| 亚洲乱码av中文一区二区| 久久国产精品免费视频| 久久久女女女女999久久| xxxx欧美18另类的高清| 欧美美女操人视频| 国产一区二中文字幕在线看| 国产精品mp4| 成人免费看吃奶视频网站| 日韩在线中文字幕| 91最新国产视频| 日韩精品在线免费播放| 97国产一区二区精品久久呦| 亚洲精品电影网站| 亚洲第一区在线观看| 国产午夜精品全部视频播放| 欧美野外猛男的大粗鳮| 韩国一区二区电影| 国产精品96久久久久久| 91欧美视频网站| 深夜精品寂寞黄网站在线观看| 日韩女优人人人人射在线视频| 国内成人精品视频| 亚洲香蕉成人av网站在线观看| 久久久久国产一区二区三区| 国产成人精品一区二区三区| 美乳少妇欧美精品| 欧美黑人xxxⅹ高潮交| 欧美电影第一页| 欧美激情亚洲综合一区| 日韩国产高清视频在线| 国外成人免费在线播放| 久久久久久久久久久国产| 欧美高清自拍一区| 亚洲福利在线播放| 国产在线视频2019最新视频| 国产欧美亚洲视频| 777国产偷窥盗摄精品视频| 日韩欧美在线字幕| 欧美精品精品精品精品免费| 青青草一区二区| 91在线观看免费高清完整版在线观看| 国产日韩在线亚洲字幕中文| 亚洲另类图片色| 久操成人在线视频| 亚洲欧美制服另类日韩| 欧美精品第一页在线播放| 国产丝袜精品第一页| 国产精品第一页在线| 国产精品网红直播| 欧美另类69精品久久久久9999| 在线视频一区二区| 2019中文字幕在线| 国产亚洲精品久久久久久777| 成人h片在线播放免费网站| 亚洲最大激情中文字幕| 日韩小视频在线观看| 亚洲人成77777在线观看网| 97精品国产97久久久久久免费| 亚洲最大福利视频网站| 久久久99久久精品女同性| 亚洲人成伊人成综合网久久久| 日韩在线视频播放| 精品国产区一区二区三区在线观看| 精品国产精品三级精品av网址| 91av国产在线| 国产精品第七影院| 欧美日韩人人澡狠狠躁视频| 欧美另类xxx| 亚洲国产精品成人va在线观看| 91亚洲精华国产精华| 大胆人体色综合| 国产精品96久久久久久又黄又硬| 亚洲国产私拍精品国模在线观看| 国产精品视频大全| 亚洲第一视频网| 久久久久久久久久久成人| 日韩欧美国产高清91| 日韩欧美成人免费视频| 国产精品自拍偷拍视频| 午夜精品www| 国产日韩欧美电影在线观看| 久久视频这里只有精品| 欧美成年人视频网站欧美| 亚洲欧洲在线看| 欧美极品美女视频网站在线观看免费| 亚洲欧洲美洲在线综合| 中文字幕日韩精品有码视频| 久久免费国产视频| 欧美日韩中文在线观看| 色噜噜狠狠狠综合曰曰曰| 97精品久久久中文字幕免费| 91中文在线视频| 成人在线国产精品| 久久久久999| 国产精品色午夜在线观看| 欧美激情一区二区三区在线视频观看| 亚洲精品福利资源站| 国产精品劲爆视频| 国产一区二区欧美日韩| 国产日产欧美a一级在线| 在线观看视频亚洲| 国产一区二区三区久久精品| 韩剧1988在线观看免费完整版| 欧美一区视频在线| 日韩成人av在线播放| 永久免费毛片在线播放不卡| 久久国产精品久久国产精品| 色999日韩欧美国产| 日本最新高清不卡中文字幕|