Maven小知识:1.packagingpompackaging是什么意思?2.propertiesproperties标签作用?3.dependencyManagement标签作用?
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即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)