传递
一个坐标引入多个jar 传递
子工程 引入了父pom 也是一种传递

继承
继承是为了消除重复,如果将 dao、service、web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本的等,可以将这些重复的配置提取出来在父工程的 pom.xml 中定义。
聚合
项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在 一起运行,比如:dao、service、web 三个工程最终会打一个独立的 war 运行。
父模块统一管理
对所依赖jar包进行版本管理的管理器。(dependencyManagement里只是声明依赖,并不实现引入)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.du</groupId>
    <artifactId>StandsSpringBoot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>commons</module>
        <module>webs</module>
    </modules>
    <properties>
        <skipTests>true</skipTests>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <alibaba.cloud.version>2022.0.0.0-RC2</alibaba.cloud.version>
        <spring-boot.version>3.1.0</spring-boot.version>
        <hutool-all.version>5.8.18</hutool-all.version>
        <commons-lang3.version>3.12.0</commons-lang3.version>
        <lombok.version>1.18.28</lombok.version>
        <passay.version>1.6.3</passay.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool-all.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
                <scope>provided</scope>
                <version>${lombok.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.passay</groupId>
                <artifactId>passay</artifactId>
                <version>${passay.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>子模块需要则引入,无需版本
依赖范围(scope)
1. compile
         这是默认范围。如果没有指定,就会使用该依赖范围。表示该依赖在编译和运行时都生效
  
 2. provided
      已提供依赖范围。使用此依赖范围的Maven依赖。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如:servlet-api)
  
 3. runtime
 runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
  
 4. system
 系统范围与provided类似,不过你必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径
  
 5. test
 test范围表明使用此依赖范围的依赖,只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才有需要。Junit的jar包就在测试阶段用就行了,你导出项目的时候没有必要把junit的东西导出去了,所以在junit坐标下加入scope-test
  
 6. import
 import范围只适用于pom文件中的<dependencyManagement>部分。表明指定的POM必须使用<dependencyManagement>部分的依赖
  
 注意:import只能在dependencyManagement的scope里
冲突
短路优先
A->B->C->X(jar)
A->B->X(jar)
声明优先
若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁



















