Maven小知識:
(1) <packaging>pom</packaging>是什么意思?
1、配置<packaging>pom</packaging>的意思是使用maven分模塊管理,都會有一個父級項目,pom文件一個重要的屬性就是packaging(打包類型),一般來說所有的父級項目的packaging都為pom,packaging默認類型jar類型,如果不做配置,maven會將該項目打成jar包。
2、項目的打包類型:pom、jar、war
packing默認是jar類型,
pom ---------> 父類型都為pom類型
jar ---------> 內部調用或者是作服務使用
war ---------> 需要部署的項目
3、
POM是最簡單的打包類型。不像一個JAR,SAR,或者EAR,它生成的構件只是它本身。
沒有代碼需要測試或者編譯,也沒有資源需要處理。打包類型為POM的項目的默認目標
生命周期階段 目標
package site:attach-descriptor
install install:install
deploy deploy:deploy
4、pom 項目里沒有java代碼,也不執行任何代碼,只是為了聚合工程或傳遞依賴用的。
5、可以理解成是將多個model合並
————————————————————————————————————————————————————————————
(2) <properties></properties>標簽作用?
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>元素用戶可以自定義一個或多個Maven屬性,然后在POM的其他地方使用${屬性名}的方式引用該屬性,這種做法的最大意義在於消除重復和統一管理。
(3)<dependencyManagement>標簽作用?、
dependencyManagement的使用場景:
隨着微服務的火爆,導致了我們現在的項目由多個微服務模塊組成,列如一個電商的項目會被分割成諸如:訂單微服務,庫存微服務,商品微服務等模塊,為了保證項目中的各個模塊所使用的包保持一致性,我們需要在最頂層(父項目)中進行版本號的鎖定。假如我們使用的springboot的版本為2.X,那么我們我們的springcloud版本也就隨之確定為Finchley版本。換言之,我們所有的子微服務必須使用相同的springcloud版本,這個時候dependencyManagement的作用就體現出了,只需要在頂層項目中加入
<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時,只需要引入如下代碼,無須再引用版本號等信息,因為springcloud版本號已被鎖定
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring‐cloud‐starter‐netflix‐eurekaserver</
artifactId>
</dependency>
</dependencies>
dependencies的使用場景
如果頂層模塊引入到一個jar,那么所有他的子模塊都會繼承這個jar包。
dependencies和dependencyManagement的區別
dependencyManagement里只是聲明依賴,並不實現引入,因此子項目需要顯式的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,並且沒有指定具體版本,才會從父項目中繼承該項,並且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。
dependencies即使在子模塊中不寫該依賴項,那么子模塊仍然會從父項目中繼承該依賴項(全部繼承)