Maven小知识:1.pom是什么意思?2.标签作用?3

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即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)


 

上一篇:firefox 插件开发2


下一篇:Pom.xml文件核心配置