登录    关于
马育民老师的博客

马育民的博客

QQ:65242847

maven <dependency>中的<scope>:import、test、system

import

maven 和Java一样都是 单继承 机制,在maven的pom文件中只能有一个<parent>标签,继承一个父工程,然后父工程通过dependencyManagement管理依赖,子工程选择性继承

问题1

提出问题:

在 springboot 应用,要求继承父工程spring-boot-starter-parent,如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>

但是如果想 继承其他父工程,或者 不想继承父工程,就无法实现了

解决问题:

通过<scope>import</scope>导入工程

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

提出问题2

提出问题:

在聚合工程中,一般父工程在dependencyManagement管理大量依赖,繁杂混乱,不方便管理

解决问题:

为了更清晰的管理,将这些依赖分类写在不同的工程中,用到哪个功能时,就通过<scope>import</scope>导入该工程

总结

好处:

1、单一职责原则,根据依赖的分类,细化每一个单一职责的pom文件

2、解决单继承问题,通过import pom文件达到依赖的目的(典型的非继承模式),从而不用从父类中引用依赖

3、父模块的pom就会非常干净,容易维护

test (测试范围)

test 范围依赖 编译运行时 都不需要,只有在 测试编译测试运行 阶段可用。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

system (系统范围)

不从maven仓库获取该jar,而是通过 systemPath 指定该jar的路径

注意:该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。


原文出处:http://malaoshi.top/show_1IX23D0t2B7z.html