Maven 多項目依賴版本管理(Maven Multi Project version management) 涉及自己的parent與spring-boot-starter-parent如何兼容

 

目錄

背景

問題

我發現了一個概念:bom

第一:創建bom

第二:創建pom parent

第三步:創建依賴集合項目

第四步:使用

參考鏈接


背景

博主工作負責的微服務已經達到了十幾個,每個微服務相互直接都是獨立的,有獨立的project,於是maven的依賴管理就很頭疼了。每一個項目都需要添加自己的版本,還要互相比對,每次升級一些第三方依賴需要修改所有文件,於是產生了自己寫parent的想法。

maven多繼承和繼承鏈: 【這個文章裏的思路和pom不匹配,pom示例都是方案1,只是誰是parent誰放到dependencyManagement裏的區別,明白有兩個方案即可】

問題


第一種思路是:自己寫一個parent pom,使用dependencyManagement管理所有依賴的版本,通過maven install安裝到本地倉庫。之後在使用的地方設置parent爲之前寫的即可。

     問題:但是這樣做存在一個問題,我使用了spring-boot-starter-parent, maven只允許存在一個parent。當然可以通過在項目中使用dependencyManagement解決,但是我想統一到一起管理。

第二個思路:將自己寫的parent pom的parent設置爲spring-boot-starter-parent即可解決上一個問題。注意:dependencyManagement中出現的每一個依賴,必須寫明版本。當我的項目繼承自己的parent的時候,也自動的繼承了spring-boot-starter-parent,所以,依賴於spring-boot-starter-parent提供版本的項目,不必再寫到dependencyManagement中。

    思路二的問題是:我所有項目沒有采用spring-boot-starter-web提供的tomcat容器,而是使用了jetty,包括我很多項目使用了一些相同的依賴,是否可以將這些依賴組合在一起,簡化我的配置呢?

簡而言之,我想做一個和spring一樣的pom version管理。通過搜索和閱讀maven的文檔,

我發現了一個概念:bom

構建自己的依賴庫
bom:bill of materials,直譯過來是物料清單,我們通過bom的方式構建自己的依賴管理。

第一:創建bom


新建一個maven項目,pom.xml文件即我們的bom文件。 
我們在bom文件中管理所有的子依賴集合項目【只管理自身子項目的依賴??意義何在。答:獨立管理,其本身不負責依賴版本的管理。

bom文件的packaging屬性爲pom,dependencyManagement:包含了所有的子依賴集合項目。

希望使用該庫的其他項目應將此bom-pom導入其pom的dependencyManagement部分,即可使用bom維護的子項目的版本;

 第二也可以把bom作爲parent繼承

<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.test</groupId>
  <artifactId>bom</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>
  <properties>
    <project1Version>1.0.0</project1Version>
    <project2Version>1.0.0</project2Version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.test</groupId>
        <artifactId>project1</artifactId>
        <version>${project1Version}</version>
      </dependency>
      <dependency>
        <groupId>com.test</groupId>
        <artifactId>project2</artifactId>
        <version>${project1Version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <modules>
    <module>parent</module>
  </modules>
</project>

 通過dependencyManagement import引入:

<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.test</groupId>
  <artifactId>use-bom</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
 
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.test</groupId>
        <artifactId>bom</artifactId>
        <version>1.0.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.test</groupId>
      <artifactId>project1</artifactId>
    </dependency>
    <dependency>
      <groupId>com.test</groupId>
      <artifactId>project2</artifactId>
    </dependency>
  </dependencies>
</project>


第二:創建pom parent 把bom作爲parent


創建一個子模塊,parent爲bom,這個模塊負責所有的公共依賴的版本管理。在我的實際情況中,由於該文件已經有了parent,所以我把spring的parent也放在了dependencyManagement中。

<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>
  <parent>
    <groupId>com.test</groupId>
    <version>1.0.0</version>
    <artifactId>bom</artifactId>
  </parent>

  <groupId>com.test</groupId>
  <artifactId>parent</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>

  <dependencyManagement>
    <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-dependencies</artifactId>
           <version>1.5.9.RELEASE</version>
           <type>pom</type>
           <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
      </dependency>
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <modules>
    <module>project1</module>
    <module>project2</module>
  </modules>
</project>


第三步:創建依賴集合項目


這是具體的依賴集合,我們可以將幾乎每個項目都有的依賴放在一起

<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>
  <parent>
    <groupId>com.test</groupId>
    <version>1.0.0</version>
    <artifactId>parent</artifactId>
  </parent>
  <groupId>com.test</groupId>
  <artifactId>project1</artifactId>
  <version>${project1Version}</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </dependency>
  </dependencies>
</project>

 

<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>
  <parent>
    <groupId>com.test</groupId>
    <version>1.0.0</version>
    <artifactId>parent</artifactId>
  </parent>
  <groupId>com.test</groupId>
  <artifactId>project2</artifactId>
  <version>${project2Version}</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </dependency>
  </dependencies>
</project>


第四步:使用


在上述項目的根目錄運行:mvn install 安裝到自己的本地倉庫。 
在你的其它的獨立項目中,將上述的parent作爲項目的parent,被parent中管理的依賴便不需要寫版本了。也可以在dependencies中添加第三步的依賴集合,簡化你項目的pom文件。

<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.test</groupId>
  <artifactId>use</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <parent>
    <groupId>com.test</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>com.test</groupId>
      <artifactId>project1</artifactId>
    </dependency>
    <dependency>
      <groupId>com.test</groupId>
      <artifactId>project2</artifactId>
    </dependency>
  </dependencies>
</project>


記住:在任何情況下,都可以使用dependencyManagement替代parent,關於二者的區別請讀者自己搜索。

 

參考鏈接

 

————————————————
版權聲明:本文爲CSDN博主「pinebud55」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/pinebud55/article/details/78667299

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章