(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即使在子模塊中不寫該依賴項,那么子模塊仍然會從父項目中繼承該依賴項(全部繼承)