当前位置: 首页 > news >正文

一篇文章看懂 spring-boot-starter-web 的 POM 配置与 compile 作用域

在 Spring Boot 项目开发中,spring-boot-starter-web是搭建 Web 应用的核心依赖。很多开发者查看它的 POM 文件时,会对其中的<scope>compile</scope>配置产生疑问:这个配置到底对不对?它的作用是什么?今天我们就结合一份真实的spring-boot-starter-webPOM 文件,详细聊聊这些问题。

一、先看这份 spring-boot-starter-web 的 POM 文件

以下是spring-boot-starter-web3.0.5 版本的核心 POM 配置片段,也是本文分析的基础:

xml

<?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.0.5</version> <name>spring-boot-starter-web</name> <description>Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container</description> <!-- 其他信息省略 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>3.0.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> <version>3.0.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>3.0.5</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>6.0.7</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.0.7</version> <scope>compile</scope> </dependency> </dependencies> </project>

二、核心疑问解答:<scope>compile</scope> 配置对不对?

结论先行:这份 POM 中的<scope>compile</scope>配置完全正确,而且非常合理

要理解这个结论,我们可以从两个层面来分析。

1. compile 是 Maven 依赖的默认作用域

Maven 对依赖作用域有明确的默认规则:当我们不主动声明<scope>标签时,依赖的作用域默认就是compile

spring-boot-starter-web的 POM 文件中,开发团队显式写出<scope>compile</scope>,并不是多此一举,而是一种更严谨的配置写法。这样做的好处是,让后续阅读 POM 文件的开发者能一眼看到依赖的作用域,避免了 “默认值” 带来的歧义,提升了配置的可读性。

2. compile 作用域的特性完美匹配核心依赖需求

compile是 Maven 中最核心、最常用的依赖作用域,它的核心特性是:依赖在项目的编译阶段、测试阶段、打包运行阶段均有效

我们结合spring-boot-starter-web的依赖来看:

  • 编译阶段spring-webspring-webmvc等依赖提供了@Controller@RequestMapping等核心注解,没有这些依赖,Web 业务代码根本无法编译通过;
  • 测试阶段:编写单元测试(比如测试 Controller 接口)时,同样需要这些核心依赖的支持,才能正常运行测试用例;
  • 打包运行阶段:最终构建的 Spring Boot 可执行 JAR 包,需要将这些依赖打包进去,否则项目运行时会出现类找不到的错误。

spring-boot-starter-web及其传递的依赖,都是 Web 项目运行的核心必备依赖,需要在全生命周期生效,因此使用compile作用域是完全匹配的。

三、拓展:Maven 其他常见依赖作用域对比

为了更清晰地理解compile作用域的合理性,我们对比一下 Maven 中其他几个常用的依赖作用域,看看它们各自的适用场景。

作用域生效阶段典型场景
test仅测试阶段(编译、运行测试用例)JUnit、spring-boot-starter-test 等测试依赖
provided编译、测试阶段有效,打包运行阶段无效Servlet API(Web 容器已提供)、Lombok(仅编译时生成代码)
runtime运行、测试阶段有效,编译阶段无效JDBC 驱动(编译时仅需 java.sql 接口,运行时才需要具体驱动)

从对比中可以看出,这些作用域都有明确的适用场景,和compile作用域的定位完全不同。

四、总结

  1. spring-boot-starter-webPOM 文件中的<scope>compile</scope>配置正确且合理,既是显式声明默认值,也是为了提升配置可读性;
  2. compile作用域的核心是 “编译、测试、打包运行全生命周期有效”,完美匹配 Web 项目核心依赖的需求;
  3. 区分 Maven 依赖作用域的关键,是看依赖在项目的哪个生命周期阶段生效,以及是否需要打包进最终产物。

希望通过这篇文章,大家能对 Maven 依赖作用域和spring-boot-starter-web的配置有更清晰的认识!

http://www.jsqmd.com/news/259644/

相关文章:

  • 深度学习毕设项目推荐-基于python-CNN卷积神经网络训练识别不同颜色的裤子识别
  • 2026年目前服务好的双相钢法兰供应商选哪家,不锈钢法兰/双相钢法兰/非标法兰/变压器法兰,双相钢法兰直销厂家排行 - 品牌推荐师
  • Maven 依赖作用域实战避坑指南
  • 2026年目前做得好的变压器法兰品牌有哪些,不锈钢管板/压力容器法兰/不锈钢法兰/法兰/船用法兰,变压器法兰厂家推荐 - 品牌推荐师
  • 深度学习毕设项目推荐-基于python-CNN-pytorch训练识别苹果树叶病害识别
  • 企业估值中的可穿戴设备市场评估
  • 10 分钟使用 OrchardCore 快速构建 .NET 内容管理系统(CMS)
  • 基于微信小程序的宠物寄领养系统(源码+论文+部署+安装)
  • 深度学习毕设项目推荐-基于python-CNN深度学习训练识别手势方向
  • C# 的小惊喜:ValueTuple,让多返回值更优雅,性能更强
  • 聚焦不锈钢管板:国内生产技术成熟的厂家一览,变压器法兰/压力容器法兰/双相钢法兰/不锈钢法兰,不锈钢管板公司哪个好 - 品牌推荐师
  • 2026年市场评价好的锻件源头厂家哪家权威,法兰/双相钢法兰/非标法兰/船用法兰/变压器法兰,锻件供应商找哪家 - 品牌推荐师
  • .NET + Vue 3 全栈开发:基于 YOLO 的AI图像识别平台实践
  • 2026年行业内可靠的不锈钢法兰厂商排行,非标法兰/不锈钢法兰/不锈钢管板/锻件/法兰,不锈钢法兰品牌怎么选择 - 品牌推荐师
  • 基于Spark的传感器数据实时分析与预测
  • MySQL的一张表使用InnoDB引擎,创建时如果忘记给这张表添加主键,请问这边表有没有聚簇索引?如果有的话聚簇索引是什么样的?
  • 2026年RTO市场新动态:口碑供货商评测指南,旋风除尘器/沸石转轮/沸石转轮+CO/RTO,RTO制造商推荐榜 - 品牌推荐师
  • 卡尔曼滤波中的变量解释(未完待续)
  • 2026年国内诚信的沸石转轮+CO公司联系电话,沸石转轮/活性炭箱/沸石转轮+CO/除尘器,沸石转轮批发厂家排行榜单 - 品牌推荐师
  • Java服务入门级耗时/cpu/内存/io分析
  • SMS-Activate停止运行
  • 详细介绍:技术演进中的开发沉思-219 Ajax:样式与事件
  • 【计算机毕业设计案例】基于python-CNN卷积神经网络深度学习训练识别不同颜色的裤子识别
  • 提示工程架构师:为社会变革注入新动能
  • 【课程设计/毕业设计】基于深度学习python-CNN-pytorch训练识别苹果树叶病害识别
  • 聚焦用户体验:近期备受推荐的RTO供货商深度解析,旋风除尘器/RTO/滤筒除尘器/除尘器/沸石转轮,RTO厂家怎么选 - 品牌推荐师
  • 全网最全专科生必用TOP10 AI论文工具测评
  • 20250117 之所思 - 人生如梦
  • Bug记录:neo4j-java-driver,Cannot coerce FLOAT to Java String
  • 深度学习毕设项目:基于python-CNN机器学习卷积神经网络训练识别不同颜色的裤子识别