Maven的compile和provided范围有何区别

看不見的法師

看不見的法師

2026-08-04

684人浏览

原创

必须使用provided范围:当依赖仅需参与编译和测试、但须排除在最终打包产物外(如tomcat已提供的servlet-api),否则会因重复类引发classcastexception或noclassdeffounderror。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

maven的compile和provided范围有何区别 - php中文网

在 Maven 项目中,当你需要让某个依赖只参与编译和测试、但明确排除在最终打包产物之外时,就必须区分 compile 和 provided 范围——比如你正在开发一个部署到 Tomcat 的 Web 应用,而 servlet-api.jar 已由 Tomcat 自带,若错误地用 compile 引入,会导致 WAR 包里出现重复的 javax.servlet.* 类,引发 ClassCastException 或 NoClassDefFoundError。

compile 是默认范围,全生命周期可用

直接在 pom.xml<dependency></dependency> 中不写 <scope></scope> 标签,或显式写成 <scope>compile</scope>,该依赖就会被纳入编译、测试、运行三阶段,并被打包进最终产物(如 JAR/WAR)。

它还会传递给下游依赖该项目的其他模块——也就是说,如果 A 项目 compile 引入了 B,C 项目依赖 A,那么 C 的 classpath 里也会自动带上 B。

这一步操作起来很简单,直接把 dependency 块粘贴进去就行,无需额外配置。

provided 只参与编译和测试,打包时被剔除

当你确认目标运行环境(如 JDK、Tomcat、Jetty、云平台)已自带某依赖时,才应使用 <scope>provided</scope>

阿里云AI平台
阿里云AI平台

阿里云AI平台

下载

方法一:手动修改 pom.xml
在 dependency 块内添加 <scope>provided</scope>,例如:
<dependency><br>  <groupid>javax.servlet</groupid><br>  <artifactid>javax.servlet-api</artifactid><br>  <version>4.0.1</version><br>  <scope>provided</scope><br></dependency>

方法二:IDE 快捷插入(以 IntelliJ IDEA 为例)
① 在 Project Structure → Modules → Dependencies 中选中对应依赖 → 点击右侧 Scope 下拉框 → 选择 【Provided】
② 点击 OK 后,IDE 会自动在 pom.xml 中补上 <scope>provided</scope>
【必须执行 mvn clean compile 验证】——否则 IDE 缓存可能仍保留旧 classpath,导致编译通过但运行时报错。

注意:provided 依赖不会出现在最终构建产物的 WEB-INF/lib/(WAR)或 lib/(JAR)目录下,也不会传递给其他项目。

关键区别验证方式

第一步:执行 mvn clean package 构建项目;
第二步:解压生成的 WAR/JAR 文件;
第三步:检查 WEB-INF/lib/ 或根目录 lib/ 中是否存在该依赖的 JAR;
→ 若存在,说明用了 compile(或未设 scope);
→ 若不存在,且编译、测试均通过,则说明 provided 生效。

这一步不能跳过——很多开发者误以为只要写了 provided 就万事大吉,结果发现运行时报 ClassNotFoundException,其实是容器环境没提供对应版本,或本地测试时忘了启动容器。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

9

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

7

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

8

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

4

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

0

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

3

10

火山引擎对象存储使用教程
火山引擎对象存储使用教程

火山引擎对象存储适合用于网站图片、视频文件、备份数据、静态资源和应用附件管理。本专题整理TOS控制台入口、存储桶创建、地域选择、权限设置、文件上传、访问链接生成、CDN加速、费用查看和常见上传或访问失败问题,帮助用户快速掌握对象存储基础操作。

2026.08.04

1

10

火山引擎云服务器使用教程
火山引擎云服务器使用教程

火山引擎云服务器使用教程适合第一次购买、部署和管理云服务器的用户参考。本专题整理控制台入口、实例创建、地域和配置选择、系统镜像设置、安全组放行、远程连接、网站部署、续费计费和常见连接失败问题,帮助用户快速完成云服务器基础使用流程。

2026.08.04

5

10

火山引擎API Key绑定大模型教程
火山引擎API Key绑定大模型教程

火山引擎API Key怎么绑定大模型适合需要在火山方舟、应用后台、脚本工具或AI编程软件中调用模型的开发者参考。本专题整理控制台服务开通、API Key创建、模型权限检查、模型ID选择、Base URL填写、调用测试和鉴权失败排查,帮助用户完成从密钥到模型调用的配置流程。

2026.08.04

2

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习