关于maven中标签的说明

1.dependency下面的type和scope的意思是什么?

比如在父项目中有这么一段配置:

    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

在 Maven 的 <dependency> 元素中,type 属性的默认值是 jar

常见的type值:

type 值 说明 使用场景
jar (默认) Java ARchive 文件 大多数 Java 依赖
pom Project Object Model 依赖管理(BOM)
war Web Application ARchive Web 应用包
test-jar 测试专用的 jar 只用于测试的依赖
maven-plugin Maven 插件 Maven 插件依赖
ejb Enterprise JavaBean EJB 模块
ear Enterprise ARchive 企业级应用包

实践建议:

  1. 大多数情况不需要指定 type:让 Maven 使用默认值 jar

  2. 只有特殊情况才指定

    • BOM 依赖管理:type=pom

    • 特殊的打包格式:type=wartype=ear 等

  3. 保持一致性:同一项目的依赖尽量统一类型

 

  • 默认值type="jar"

  • 常见值jar(大多数依赖), pom(BOM依赖管理)

  • 原则:普通 Java 依赖不指定 type,依赖管理包必须指定 type=pom

scope=import 的含义

作用:导入 BOM(Bill Of Materials)

scope=import 表示将这个依赖的 依赖管理信息 导入到当前项目的依赖管理中。

import 的工作流程

1. 你的项目声明 scope=import
2. Maven 下载 BOM 文件
3. 将 BOM 中的 <dependencyManagement> 内容合并到你的项目中
4. 你的依赖自动使用 BOM 中定义的版本

 

其他 scope 值对比

scope 值 含义 使用场景
import 导入依赖管理信息 仅在 <dependencyManagement> 中用于 BOM
compile 编译范围(默认) 编译、测试、运行都需要
provided 已提供范围 容器或 JDK 已提供,如 servlet-api
runtime 运行时范围 仅运行时需要,如 JDBC 驱动
test 测试范围 仅测试时需要,如 junit
system 系统范围 从本地系统路径引入

总结

  • scope=import 是专门用于导入 BOM 依赖管理信息的

  • 不能省略:在 <dependencyManagement> 中对于 type=pom 的依赖必须使用

  • 作用:让项目继承 BOM 中定义的所有依赖版本

  • 位置:只能在 <dependencyManagement> 中使用

 

2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--

posted on 2026-01-06 22:36  有点懒惰的大青年  阅读(3)  评论(0)    收藏  举报