欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

maven多模塊項(xiàng)目依賴管理與依賴?yán)^承詳解

 更新時(shí)間:2021年12月30日 16:01:12   作者:my天降大任  
這篇文章主要介紹了maven多模塊項(xiàng)目依賴管理與依賴?yán)^承詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

maven多模塊項(xiàng)目依賴管理與依賴?yán)^承

1、指定父模塊與默認(rèn)繼承

dependencies即使在子項(xiàng)目中不寫(xiě)該依賴項(xiàng),那么子項(xiàng)目仍然會(huì)從父項(xiàng)目中繼承該依賴項(xiàng)(全部繼承)

父模塊的pom

<?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.zhangguo.maven03</groupId>
    <artifactId>Maven03</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Maven03-Dao</module>
        <module>Maven03-Service</module>
    </modules>
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>RELEASE</spring.version>
    </properties>
        <dependencies>
            <!-- junit -->
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
</project>

子模塊的pom

<?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">
    <!--聲明自己的父模塊,將繼承父模塊的所有依賴-->
    <parent>
        <artifactId>Maven03</artifactId>
        <groupId>com.zhangguo.maven03</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>Maven03-Dao</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
            <!--版本是從父模塊依賴過(guò)來(lái)的properties-->
        </dependency>
    </dependencies>
</project>

RELEASE表示最新的發(fā)布版本,結(jié)果如下:

2、依賴管理

dependencyManagement里只是聲明依賴,并不實(shí)現(xiàn)引入,因此子項(xiàng)目需要顯式的聲明需要用的依賴。如果不在子項(xiàng)目中聲明依賴,是不會(huì)從父項(xiàng)目中繼承下來(lái)的;只有在子項(xiàng)目中寫(xiě)了該依賴項(xiàng),并且沒(méi)有指定具體版本,才會(huì)從父項(xiàng)目中繼承該項(xiàng),并且version和scope都讀取自父pom;另外如果子項(xiàng)目中指定了版本號(hào),那么會(huì)使用子項(xiàng)目中指定的jar版本。

當(dāng)我把父項(xiàng)目中的依賴放到依賴管理中的效果如下所示:

<?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.zhangguo.maven03</groupId>
    <artifactId>Maven03</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Maven03-Dao</module>
        <module>Maven03-Service</module>
    </modules>
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>RELEASE</spring.version>
    </properties>
    <!--dependencyManagement里只是聲明依賴,并不實(shí)現(xiàn)引入,
    因此子項(xiàng)目需要顯式的聲明需要用的依賴。
    如果不在子項(xiàng)目中聲明依賴,是不會(huì)從父項(xiàng)目中繼承來(lái)的;
    只有在子項(xiàng)目中寫(xiě)了該依賴項(xiàng),并且沒(méi)有指定具體版本,才會(huì)從父項(xiàng)目中繼承該項(xiàng),
    并且version和scope都讀取自父pom;
    另外如果子項(xiàng)目中指定了版本號(hào),那么會(huì)使用子項(xiàng)目中指定的jar版本。-->
    <dependencyManagement>
        <dependencies>
            <!-- junit -->
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
</project>

結(jié)果

這里的父模塊與子模塊都并沒(méi)有依賴junit了,這時(shí)的依賴只是用于管理,并沒(méi)有真正依賴。

<dependencyManagement>元素既能讓子模塊繼承到父模塊的依賴配置,又能保證子模塊依賴使用的靈活性。

使用<dependencyManagement>聲明的依賴即不會(huì)引入依賴,也不會(huì)給他的子模塊引入依賴。但這段配置是可以繼承的。

在子類(lèi)中,依賴配置較原來(lái)就簡(jiǎn)單了??梢栽谧宇?lèi)中只配置groupId和artifactId ,省去了version。因?yàn)橥暾囊蕾嚶暶饕呀?jīng)包含在父POM中。 這樣可以統(tǒng)一項(xiàng)目范圍中依賴的版本,幫助降低依賴沖突的幾率。如果子模塊不聲明依賴的使用,即使該依賴已經(jīng)在父POM的dependencyManangement中聲明了,也不會(huì)產(chǎn)生任何實(shí)際的效果。

如果想要在某個(gè)模塊中使用和另一個(gè)模塊中完全一樣的dependencyManagement配置,除了賦值和繼承外,還可以使用import范圍依賴將這一配置導(dǎo)入。

我們要達(dá)到的目的是:父模塊作版本管理不實(shí)際依賴,子模塊按需依賴。

父模塊pom

<?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.zhangguo.maven03</groupId>
    <artifactId>Maven03</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Maven03-Dao</module>
        <module>Maven03-Service</module>
    </modules>
    
    <!--版本管理-->
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>RELEASE</spring.version>
    </properties>
    <!--依賴聲明-->
    <dependencyManagement>
        <dependencies>
            <!-- junit -->
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

子模塊pom:

<?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">
    <parent>
        <artifactId>Maven03</artifactId>
        <groupId>com.zhangguo.maven03</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>Maven03-Service</artifactId>
    <dependencies>
        <!--按需依賴,版本被父模塊控制,可以自行聲明,優(yōu)先級(jí)更高-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
</project>

結(jié)果:

這樣做的好處:統(tǒng)一管理項(xiàng)目的版本號(hào),確保應(yīng)用的各個(gè)項(xiàng)目的依賴和版本一致,才能保證測(cè)試的和發(fā)布的是相同的成果,因此,在頂層pom中定義共同的依賴關(guān)系。

同時(shí)可以避免在每個(gè)使用的子項(xiàng)目中都聲明一個(gè)版本號(hào),這樣想升級(jí)或者切換到另一個(gè)版本時(shí),只需要在父類(lèi)容器里更新,不需要任何一個(gè)子項(xiàng)目的修改;如果某個(gè)子項(xiàng)目需要另外一個(gè)版本號(hào)時(shí),只需要在dependencies中聲明一個(gè)版本號(hào)即可。子類(lèi)就會(huì)使用子類(lèi)聲明的版本號(hào),不繼承于父類(lèi)版本號(hào)。

關(guān)于maven項(xiàng)目依賴?yán)^承問(wèn)題

在Maven中,子項(xiàng)目是可以繼承父項(xiàng)目的依賴的。

需要在父項(xiàng)目中加入

<modules>
   <module>childA</module>
   <module>childB</module>
</modules>

把父項(xiàng)目已POM的形式

打包到maven庫(kù)中 (*部分必須要有)

<modelVersion>4.0.0</modelVersion>  
<groupId>com.sang.main</groupId>              *
<artifactId>Parent-Moduel</artifactId>         *
<version>1.0.2</version>            *
<packaging>pom</packaging>  
<name>Simple-main</name>

在子項(xiàng)目中以<parent>標(biāo)簽

繼承父項(xiàng)目即可。

<parent>
   <groupId>com.sang.main</groupId>
   <artifactId>Parent-Moduel</artifactId>
   <version>1.0.2</version>
</parent>

如果是父項(xiàng)目中的直接依賴,在子項(xiàng)目中什么都不用寫(xiě),就會(huì)自動(dòng)繼承;

如果是父項(xiàng)目中<dependencyManagement>標(biāo)簽下的依賴,可以有選擇性的繼承,這個(gè)時(shí)候要自己在子項(xiàng)目添加依賴,需要有<groupId>和<artifactId>,但是版本就可以省略,直接繼承父項(xiàng)目。 這樣一來(lái),我們就可以只繼承父項(xiàng)目中我們需要的,而不是一股腦全部繼承。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot中連接多個(gè)RabbitMQ的方法詳解

    SpringBoot中連接多個(gè)RabbitMQ的方法詳解

    這篇文章主要介紹了SpringBoot中連接多個(gè)RabbitMQ的方法詳解,要實(shí)現(xiàn) SpringBoot 連接多個(gè) RabbitMQ,只能自定義重寫(xiě)一些東西,分別配置才可以,下面一起來(lái)走一下試試,需要的朋友可以參考下
    2023-10-10
  • springboot接入微信app支付的方法

    springboot接入微信app支付的方法

    本文使用springboot集成微信支付服務(wù),包含微信統(tǒng)一支付訂單接口,以及支付回調(diào)接口等,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • java處理日期的工具類(lèi)DateUtil

    java處理日期的工具類(lèi)DateUtil

    這篇文章主要為大家詳細(xì)介紹了java處理日期的工具類(lèi)DateUtil,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 基于Session的國(guó)際化實(shí)現(xiàn)方法

    基于Session的國(guó)際化實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇基于Session的國(guó)際化實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • java中Socket設(shè)置超時(shí)時(shí)間的兩種方式

    java中Socket設(shè)置超時(shí)時(shí)間的兩種方式

    這篇文章主要介紹了java中Socket設(shè)置超時(shí)時(shí)間的兩種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • mybatis 加載配置文件的方法(兩種方式)

    mybatis 加載配置文件的方法(兩種方式)

    這篇文章主要介紹了mybatis 加載配置文件的方法,通過(guò)實(shí)例代碼給大家介紹了mybatis 加載配置文件的兩種方式,需要的朋友可以參考下
    2017-12-12
  • IntelliJ IDEA配置Tomcat(完整版圖文教程)

    IntelliJ IDEA配置Tomcat(完整版圖文教程)

    這篇文章主要介紹了IntelliJ IDEA配置Tomcat(完整版圖文教程),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • JavaWeb Session失效時(shí)間設(shè)置方法

    JavaWeb Session失效時(shí)間設(shè)置方法

    這篇文章主要介紹了JavaWeb Session失效時(shí)間設(shè)置方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Spring Cloud接口突然變慢的解決方案

    Spring Cloud接口突然變慢的解決方案

    在Spring Cloud項(xiàng)目中,接口突然變慢可能是由多種原因造成的,本文給大家介紹了一些可能的原因以及相應(yīng)的解決方案,通過(guò)代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • JSON字符串轉(zhuǎn)成java的Map對(duì)象詳細(xì)步驟

    JSON字符串轉(zhuǎn)成java的Map對(duì)象詳細(xì)步驟

    這篇文章主要介紹了如何將JSON字符串轉(zhuǎn)換為Java對(duì)象的步驟,包括定義Element類(lèi)、使用Jackson庫(kù)解析JSON和添加依賴,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01

最新評(píng)論