(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)(全部繼承)