Maven中的packing,properties,dependencyManagement都是什么意思

时间:2022-11-09 20:45:51 类型:JAVA
字号:    

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

<