Maven中的关系

Maven中的关系

继承

一个Maven项目可以继承另一个Maven项目,分别称为子项目、父项目

场景:多个子项目中使用的是相同的依赖或插件,此时可以把相同的配置抽取到一个父项目中,进行统一的管理,保持一致性

步骤:

  1. 将父项目的打包方式设置为pom

    <!--
        打包方式:
        jar:Java项目的打包方式:默认值
        war:Web项目的打包方式
        pom:父项目的打包方式-->
        <packaging>jar</packaging>
    
  2. 在子项目中引用父项目,指定父项目的坐标

    <!--  引用父项目,指定父项目的坐标-->
        <parent>
            <groupId>org.example</groupId>
            <artifactId>parent</artifactId>
            <version>1.0-SNAPSHOT</version>
              <!--  指定父项目的pom.xml文件的相对物理路径-->
            <relativePath>xx/xx/</relativePath>
        </parent>
    
    

问题:有时并不是父项目的所有依赖都需要被项目继承,但是又希望能够通过父项目对依赖进行统一管理,如版本的控制

解决:使用dependencyManagement标签

步骤:

  1. 在父项目中配置dependencyManagement

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.ljy</groupId>
                <artifactId>mysql..</artifactId>
                <version>12.52.</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 在子项目中引用父项目中的依赖、

<dependencies>
    <dependency>
        <groupId>com.ljy</groupId>
        <artifactId>mysql..</artifactId>
    </dependency>
</dependencies>

聚合

将多个子项目添加到一个父项目中,然后通过对父项目进行操作,从而实现对所有聚合的子项目的操作

在父项目的pom中

<!--    聚合子项目,指定子项目的根目录-->
 <modules>
     <module>../...</module>
     <module>../...</module>
 </modules>

依赖(继承)

项目C-->项目B-->项目A

概念:如果项目C依赖于项目B,项目B依赖项目A,则项目C也依赖于项目A,这叫依赖的传递

配置依赖关系:

<!--  依赖于其他子项目child01-->
        <dependency>
            <groupId>com.ljy</groupId>
            <artifactId>child01</artifactId>
            <version>xx</version>
        </dependency>

控制依赖的传递

并不是所有的依赖都会被传递

  • scope为compile的依赖会传递
  • scope为test的依赖不会被传递
  • 配置optional为true的依赖不会被传递(不能写在父项目中)
<dependency>
    <groupId>com.ljy</groupId>
    <artifactId>lof3</artifactId>
    <optional>true</optional>
</dependency>

不会出现jar包的冲突

使用Maven不会出现jar包冲突,通过两个原则来保证:

  • 就近原则
  • 优先定义原则(看是哪个依赖先写,02与01的先后顺序)
       <dependency>
            <groupId>com.ljy</groupId>
            <artifactId>child01</artifactId>
            <version>xx</version>
        </dependency>
       <dependency>
            <groupId>com.ljy</groupId>
            <artifactId>child02</artifactId>
            <version>xx</version>
        </dependency>

不要传递的依赖

方式1:在依赖的配置中配置不允许传递

<optional>true</optional>

方式2:在当前的项目中配置不接收传递的特定依赖

<dependency>
   <!-- 不接收特定的依赖 --> 
<exclusions>
 <exclusion>
    <groupId>xxx</groupId>
    <artifacdId>xxx</artifacdId>
 </exclusion>
</exclusions>
</dependency>

posted @ 2020-11-27 12:24  喂s别闹  阅读(166)  评论(0编辑  收藏  举报