最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven 主模塊和子模塊pom.xml依賴聲明

 更新時(shí)間:2020年10月27日 10:38:44   作者:JellyfishMIX  
這篇文章主要介紹了Maven 主模塊和子模塊pom.xml依賴聲明,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

今天想到了一個(gè)問題,如果一個(gè)依賴只有子模塊用到了,是放入子模塊的 pom.xml 呢,還是放入父模塊的 pom.xml 呢?

理論上當(dāng)然是子模塊單獨(dú)聲明更符合邏輯。但是以上問題的場(chǎng)景來(lái)源有兩個(gè):

  1. 為了方便,或者考慮到其它子模塊或許以后會(huì)用到此依賴的可能性。
  2. 單模塊項(xiàng)目改造為多模塊后,原本的依賴全部聲明在父模塊 pom.xml 中,考慮是否要大量遷移到用到的子模塊中。

進(jìn)而引申出的問題:

如果依賴全部放入父模塊,部分子模塊沒有用到這些依賴,是否會(huì)增加這些子模塊打包后的代碼體積?

背景知識(shí)

dependencies與dependencyManagement的區(qū)別

  • 父項(xiàng)目中的 <dependencies></dependencies> 中定義的所有依賴,在子項(xiàng)目中都會(huì)直接繼承。
  • 在父項(xiàng)目中的 <dependencyManagement></dependencyManagement> 中定義的所有依賴,子項(xiàng)目并不會(huì)繼承,我們還要在子項(xiàng)目中引入我們需要的依賴,才能進(jìn)行使用。此時(shí)我們?cè)谧禹?xiàng)目中不用設(shè)置版本。

實(shí)驗(yàn)

為了回答這個(gè)問題:“如果依賴全部放入父模塊,部分子模塊沒有用到這些依賴,是否會(huì)增加這些子模塊打包后的代碼體積?”。我們拿一個(gè) maven 多模塊項(xiàng)目打包測(cè)試一下。

實(shí)驗(yàn)材料:

如圖,一個(gè)多模塊項(xiàng)目。

其中 wx-common 模塊只是放了一些 enums:

父模塊依賴:

<properties>
  <java.version>11</java.version>
  <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
  <wx-common-version>0.0.1-SNAPSHOT</wx-common-version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.6.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.2.5.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.2.6.RELEASE</version>
    <scope>test</scope>
    <exclusions>
      <exclusion>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
      </exclusion>
    </exclusions>
  </dependency>

  <!--lombok-->
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/org.json/json -->
  <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20190722</version>
  </dependency>

  <dependency>
    <groupId>com.jellyfishmix.interchange</groupId>
    <artifactId>common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </dependency>

  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.2.RELEASE</version>
  </dependency>
</dependencies>

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>com.jellyfishmix.interchange</groupId>
      <artifactId>wx-common</artifactId>
      <version>${wx-common-version}</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

wx-common 模塊無(wú)單獨(dú)引入的依賴。

wx-common 模塊單獨(dú)打包后的大?。?982 bytes):

接下來(lái)我們把父模塊的依賴都放入 <dependencyManagement></dependencyManagement> 中,這樣子模塊就不會(huì)全部繼承這些依賴,而是需要在子模塊的 pom.xml 中也進(jìn)行聲明,子模塊才能繼承對(duì)應(yīng)的依賴。

按照博主的猜想, 子模塊最初繼承了很多父模塊的依賴,當(dāng)單獨(dú)打包子模塊時(shí),這些依賴被打入了子模塊jar包中。而這些繼承過(guò)來(lái)的父模塊的依賴中,有很多是子模塊不需要的,因此子模塊單獨(dú)打出的包,會(huì)有不少冗余體積 。

我們把父模塊的依賴都挪入 <dependencyManagement></dependencyManagement> 中,而 子模塊又沒有在自己的 pom.xml 中聲明這些依賴,也就不會(huì)繼承這些依賴,這樣子模塊單獨(dú)打出的包,會(huì)不會(huì)減少很多體積呢 ?

按我們的推測(cè),把父模塊的依賴都放入 <dependencyManagement></dependencyManagement> 中,然后對(duì)子模塊單獨(dú)打包(3982 bytes):

可以看到打包出來(lái)的 jar,并沒有按照我們預(yù)先設(shè)想的,體積減少了很多,而是和之前的體積一模一樣(都是3982 bytes)。

看到這個(gè)結(jié)果,博主百思不得其解。難道 子模塊繼承的父模塊的依賴,如果在子模塊中沒有被使用,在子模塊單獨(dú)打包時(shí),就不會(huì)被打入 jar 嗎?

我們?cè)僮鲆粋€(gè)實(shí)驗(yàn)來(lái)驗(yàn)證猜想,現(xiàn)在父模塊的依賴還是在 <dependencyManagement></dependencyManagement> 中,需要在子模塊的 pom.xml 中也進(jìn)行聲明,子模塊才能繼承對(duì)應(yīng)的依賴。我們給子模塊的 pom.xml 多聲明幾個(gè)依賴:

<!--lombok-->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.12</version>
</dependency>

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  <version>2.2.5.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20190722</version>
</dependency>

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
  <version>2.2.2.RELEASE</version>
</dependency>

然后對(duì)子模塊單獨(dú)打包(4175 bytes):

可以看到我們的 jar 包體積確實(shí)增加了(4175 - 3982 = 193 bytes),但這些增加的代碼體積,應(yīng)該是我們的 pom.xml 中新增的一對(duì)對(duì) <dependency></dependency> 的體積,而不是真正引入的依賴的代碼。

因此,博主確信了推測(cè): 子模塊繼承的父模塊的依賴/子模塊聲明的依賴,如果在子模塊中沒有被使用,在子模塊單獨(dú)打包時(shí),就不會(huì)被打入 jar 。

進(jìn)一步實(shí)驗(yàn)來(lái)確認(rèn)推測(cè),我們?cè)谧幽K中使用一下聲明的依賴。只在子模塊中加兩個(gè)注解: @FeignClient(name = "interchange-wx") ,對(duì)子模塊單獨(dú)打包(4259 bytes):

打包結(jié)果(4259 - 4175 = 84 bytes)。

因此,maven 打包加入的依賴代碼應(yīng)該是被調(diào)用到的部分代碼,沒有被調(diào)用到的依賴代碼不會(huì)被加入打包后的 jar 包中。

實(shí)驗(yàn)結(jié)論

  •  子模塊繼承的父模塊的依賴/子模塊聲明的依賴,如果在子模塊中沒有被使用,在子模塊單獨(dú)打包時(shí),就不會(huì)被打入 jar 。
  • maven 打包加入的依賴代碼是被調(diào)用到的部分代碼,沒有被調(diào)用到的依賴代碼不會(huì)被加入打包后的 jar 包中。

推薦做法

對(duì)于 “依賴放入子模塊還是父模塊” 這個(gè)問題,推薦將依賴放入父模塊的 <dependencyManagement></dependencyManagement> 中,然后子模塊有需要的依賴,在子模塊的 pom.xml 中聲明。這樣便于在父模塊中統(tǒng)一管理依賴版本,避免子模塊依賴版本不一致造成的混亂或沖突。

到此這篇關(guān)于Maven 主模塊和子模塊pom.xml依賴聲明的文章就介紹到這了,更多相關(guān)Maven pom.xml依賴聲明內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)將png格式圖片轉(zhuǎn)換成jpg格式圖片的方法【測(cè)試可用】

    Java實(shí)現(xiàn)將png格式圖片轉(zhuǎn)換成jpg格式圖片的方法【測(cè)試可用】

    這篇文章主要介紹了Java實(shí)現(xiàn)將png格式圖片轉(zhuǎn)換成jpg格式圖片的方法,涉及java文件讀寫及圖形創(chuàng)建等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 關(guān)于spring boot整合kafka+注解方式

    關(guān)于spring boot整合kafka+注解方式

    這篇文章主要介紹了關(guān)于spring boot整合kafka+注解方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Mybatis-plus更新Null字段的四種方法

    Mybatis-plus更新Null字段的四種方法

    在項(xiàng)目開發(fā)過(guò)程中,經(jīng)常會(huì)使用Mybatis-plus的updateById()方法,快速將接收道德參數(shù)或者查詢結(jié)果中原本不為null的字段更新為null,這個(gè)時(shí)候使用updateById()并不能實(shí)現(xiàn)這個(gè)操作,不會(huì)報(bào)錯(cuò),但是對(duì)應(yīng)的字段并沒有更新為null,所以本文介紹了Mybatis-plus更新Null字段的方法
    2025-03-03
  • idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問題

    idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問題

    這篇文章主要介紹了idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java使用正則表達(dá)式進(jìn)行匹配且對(duì)匹配結(jié)果逐個(gè)替換

    Java使用正則表達(dá)式進(jìn)行匹配且對(duì)匹配結(jié)果逐個(gè)替換

    這篇文章主要介紹了Java使用正則表達(dá)式進(jìn)行匹配且對(duì)匹配結(jié)果逐個(gè)替換,文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • tomcat connection-timeout連接超時(shí)源碼解析

    tomcat connection-timeout連接超時(shí)源碼解析

    這篇文章主要為大家介紹了tomcat connection-timeout連接超時(shí)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java8?CompletableFuture?異步多線程的實(shí)現(xiàn)

    Java8?CompletableFuture?異步多線程的實(shí)現(xiàn)

    本文主要介紹了Java8?CompletableFuture?異步多線程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java?SimpleDateFormat與System類使用示例詳解

    Java?SimpleDateFormat與System類使用示例詳解

    這篇文章主要介紹了Java?SimpleDateFormat與System類使用示例,對(duì)于SimpleDateFormat類,是一個(gè)用來(lái)區(qū)分區(qū)域設(shè)置的方式進(jìn)行日期的是指,以及對(duì)日期進(jìn)行處理分析的一個(gè)實(shí)現(xiàn)類
    2022-11-11
  • Java實(shí)現(xiàn)輸出數(shù)字三角形實(shí)例代碼

    Java實(shí)現(xiàn)輸出數(shù)字三角形實(shí)例代碼

    大家好,本篇文章主要講的是Java實(shí)現(xiàn)輸出三角形實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 詳解Springboot @Cacheable 注解(指定緩存位置)

    詳解Springboot @Cacheable 注解(指定緩存位置)

    這篇文章主要介紹了詳解Springboot @Cacheable 注解(指定緩存位置),使用? @Cacheable ?注解就可以將運(yùn)行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

鄂托克旗| 秀山| 景德镇市| 肇州县| 酒泉市| 南安市| 云浮市| 灵台县| 棋牌| 延寿县| 荆州市| 涿鹿县| 隆尧县| 山西省| 澳门| 康定县| 大竹县| 厦门市| 怀远县| 新蔡县| 枣庄市| 阜城县| 江安县| 抚远县| 定日县| 大同县| 横峰县| 科技| 舟曲县| 大洼县| 柞水县| 确山县| 桂东县| 庐江县| 花莲市| 淮阳县| 衡水市| 和平区| 穆棱市| 正阳县| 涟源市|