日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

Maven中的packing,properties,dependencyManagement都是什么意思

時(shí)間:2022-11-09 20:45:51 類型:JAVA
字號(hào):    

(1) <packaging>pom</packaging>是什么意思?

1、配置<packaging>pom</packaging>的意思是使用maven分模塊管理,分模塊都會(huì)有一個(gè)父級(jí)項(xiàng)目,pom文件一個(gè)重要的屬性就是packaging(打包類型),一般來說所有的父級(jí)項(xiàng)目的packaging都為pom,packaging默認(rèn)類型jar類型,如果不做配置,maven會(huì)將該項(xiàng)目打成jar包。

2、項(xiàng)目的打包類型:pom、jar、war

  packing默認(rèn)是jar類型,

 

  pom ---------> 父類型都為pom類型

 

  jar ---------> 內(nèi)部調(diào)用或者是作服務(wù)使用

 

  war ---------> 需要部署的項(xiàng)目


3、POM是最簡單的打包類型。不像一個(gè)JAR,SAR,或者EAR,它生成的構(gòu)件只是它本身。沒有代碼需要測(cè)試或者編譯,也沒有資源需要處理。打包類型為POM的項(xiàng)目的默認(rèn)目標(biāo)

生命周期階段        目標(biāo)

package               site:attach-descriptor

install                   install:install

deploy                 deploy:deploy


4、pom 項(xiàng)目里沒有java代碼,也不執(zhí)行任何代碼,只是為了聚合工程或傳遞依賴用的。

5、可以理解成是將多個(gè)model合并

(2) <properties></properties>標(biāo)簽作用?

eg:

<properties>
  <mybatis-plus.version>3.0.5</mybatis-plus.version>
  <velocity.version>2.0</velocity.version>
  <swagger.version>2.7.0</swagger.version>
  ....
</properties>
 
<!-- 配置<dependencyManagement>鎖定依賴的版本 -->
<dependencyManagement><!--mybatis-plus 持久層-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>${mybatis-plus.version}</version>
    </dependency>

    <!-- velocity 模板引擎, Mybatis Plus 代碼生成器需要 -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>${velocity.version}</version>
    </dependency>
    
    <!--swagger-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>${swagger.version}</version>
    </dependency>
    ....
</dependencyManagement>

通過<properties>元素用戶可以自定義一個(gè)或多個(gè)Maven屬性,然后在POM的其他地方使用${屬性名}的方式引用該屬性,這種做法的最大意義在于消除重復(fù)和統(tǒng)一管理。

(3)<dependencyManagement>標(biāo)簽作用?、

 

dependencyManagement的使用場(chǎng)景:


           隨著微服務(wù)的火爆,導(dǎo)致了我們現(xiàn)在的項(xiàng)目由多個(gè)微服務(wù)模塊組成,列如一個(gè)電商的項(xiàng)目會(huì)被分割成諸如:訂單微服務(wù),庫存微服務(wù),商品微服務(wù)等模塊,為了保證項(xiàng)目中的各個(gè)模塊所使用的包保持一致性,我們需要在最頂層(父項(xiàng)目)中進(jìn)行版本號(hào)的鎖定。假如我們使用的springboot的版本為2.X,那么我們的springcloud版本也就隨之確定為Finchley版本。換言之,我們所有的子微服務(wù)必須使用相同的springcloud版本,這個(gè)時(shí)候dependencyManagement的作用就體現(xiàn)出了,只需要在頂層項(xiàng)目中加入

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring‐cloud‐dependencies</artifactId>
                <version>Finchley.M9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
  </dependencyManagement>

這段代碼后,假如訂單模塊使用springcloud時(shí),只需要引入如下代碼,無須再引用版本號(hào)等信息,因?yàn)閟pringcloud版本號(hào)已被鎖定

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring‐cloud‐starter‐netflix‐eurekaserver</artifactId>
        </dependency>
</dependencies>

  dependencies的使用場(chǎng)景

     如果頂層模塊引入到一個(gè)jar,那么所有他的子模塊都會(huì)繼承這個(gè)jar包。
    dependencies和dependencyManagement的區(qū)別

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

<