中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Maven 主模塊和子模塊pom.xml

發布時間:2020-10-28 15:37:14 來源:億速云 閱讀:541 作者:Leah 欄目:開發技術

Maven 主模塊和子模塊pom.xml?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

背景知識

dependencies與dependencyManagement的區別

  • 父項目中的 <dependencies></dependencies> 中定義的所有依賴,在子項目中都會直接繼承。
  • 在父項目中的 <dependencyManagement></dependencyManagement> 中定義的所有依賴,子項目并不會繼承,我們還要在子項目中引入我們需要的依賴,才能進行使用。此時我們在子項目中不用設置版本。

實驗

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

實驗材料:

Maven 主模塊和子模塊pom.xml

如圖,一個多模塊項目。

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

Maven 主模塊和子模塊pom.xml

父模塊依賴:

<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 模塊無單獨引入的依賴。

wx-common 模塊單獨打包后的大小(3982 bytes):

Maven 主模塊和子模塊pom.xml

接下來我們把父模塊的依賴都放入 <dependencyManagement></dependencyManagement> 中,這樣子模塊就不會全部繼承這些依賴,而是需要在子模塊的 pom.xml 中也進行聲明,子模塊才能繼承對應的依賴。

按照博主的猜想, 子模塊最初繼承了很多父模塊的依賴,當單獨打包子模塊時,這些依賴被打入了子模塊jar包中。而這些繼承過來的父模塊的依賴中,有很多是子模塊不需要的,因此子模塊單獨打出的包,會有不少冗余體積

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

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

Maven 主模塊和子模塊pom.xml

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

看到這個結果,博主百思不得其解。難道 子模塊繼承的父模塊的依賴,如果在子模塊中沒有被使用,在子模塊單獨打包時,就不會被打入 jar 嗎?

我們再做一個實驗來驗證猜想,現在父模塊的依賴還是在 <dependencyManagement></dependencyManagement> 中,需要在子模塊的 pom.xml 中也進行聲明,子模塊才能繼承對應的依賴。我們給子模塊的 pom.xml 多聲明幾個依賴:

<!--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>

然后對子模塊單獨打包(4175 bytes):

Maven 主模塊和子模塊pom.xml

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

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

進一步實驗來確認推測,我們在子模塊中使用一下聲明的依賴。只在子模塊中加兩個注解: @FeignClient(name = "interchange-wx") ,對子模塊單獨打包(4259 bytes):

Maven 主模塊和子模塊pom.xml

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

因此,maven 打包加入的依賴代碼應該是被調用到的部分代碼,沒有被調用到的依賴代碼不會被加入打包后的 jar 包中。

實驗結論

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

推薦做法

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

關于Maven 主模塊和子模塊pom.xml問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漳浦县| 昔阳县| 南和县| 林芝县| 甘德县| 甘泉县| 青龙| 哈巴河县| 陆良县| 乐清市| 交城县| 灌南县| 太谷县| 浏阳市| 略阳县| 鄂尔多斯市| 安多县| 乾安县| 恩平市| 古浪县| 游戏| 湖南省| 苏尼特右旗| 临沭县| 阳曲县| 德惠市| 德化县| 伊春市| 稷山县| 临西县| 双城市| 松原市| 琼结县| 长沙市| 大余县| 民权县| 密山市| 中西区| 龙口市| 乌审旗| 玉山县|