温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java依赖范围有哪些

发布时间:2026-10-26 08:01:55 来源:亿速云 阅读:104 作者:小樊 栏目:编程语言

在 Java 项目中,依赖范围(Dependency Scope)通常指的是 Maven 或 Gradle 等构建工具中,用来控制依赖在编译、测试、运行、打包等不同阶段的可见性和传递性的配置。以 Maven 为主(最常用),常见依赖范围如下:


一、Maven 中的依赖范围(Scope)

1. compile(默认)

  • 生效阶段:编译、测试、运行、打包
  • 是否传递:是
  • 典型场景:项目核心依赖
<scope>compile</scope>

✅ 最常用,不写 scope 默认就是 compile


2. provided

  • 生效阶段:编译、测试
  • 不生效阶段:运行、打包(由运行环境提供)
  • 是否传递:否
  • 典型场景:
    • Servlet API
    • JDK 自带 API
    • 应用服务器提供的依赖
<scope>provided</scope>

⚠️ 运行时不能缺少,但不打进包里


3. runtime

  • 生效阶段:测试、运行
  • 不生效阶段:编译
  • 是否传递:是
  • 典型场景:
    • JDBC 驱动
    • 接口实现类
<scope>runtime</scope>

4. test

  • 生效阶段:测试
  • 不生效阶段:编译(主代码)、运行、打包
  • 是否传递:否
  • 典型场景:
    • JUnit
    • Mockito
<scope>test</scope>

5. system

  • 生效阶段:编译、测试
  • 不生效阶段:运行(需手动提供)
  • 是否传递:否
  • 特点:
    • 必须通过 systemPath 指定本地路径
    • 不推荐使用
<scope>system</scope>
<systemPath>/path/to/jar</systemPath>

6. import(特殊)

  • 仅用于 <dependencyManagement>
  • 作用:导入其他 pom 的依赖管理配置
  • 是否传递:否
<scope>import</scope>

二、不同 Scope 对比表

Scope 编译 测试 运行 打包 传递
compile ✅ ✅ ✅ ✅ ✅
provided ✅ ✅ ❌ ❌ ❌
runtime ❌ ✅ ✅ ✅ ✅
test ❌ ✅ ❌ ❌ ❌
system ✅ ✅ ❌ ❌ ❌

三、Gradle 中的对应概念(简略)

Gradle 使用 configuration 代替 scope:

Maven Scope Gradle 配置
compile implementation
runtime runtimeOnly
test testImplementation
provided compileOnly

如果你愿意,我也可以:

  • 用 具体例子说明某个 scope 的问题
  • 对比 Maven vs Gradle 依赖管理
  • 讲 依赖冲突 / 传递依赖相关的内容
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手