温馨提示×

温馨提示×

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

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

java Module模块如何依赖

发布时间:2026-10-08 22:53:45 来源:亿速云 阅读:103 作者:小樊 栏目:编程语言

在 Java 9+ 的 Module System(JPMS,Java Platform Module System) 中,“模块依赖”是通过 module-info.java 来声明的。下面从基础到常见场景给你讲清楚。


一、基本概念

一个模块就是一个 包含 module-info.java 的 jar 或目录。

com.example.foo
 ├── module-info.java
 └── com/example/foo/...

二、声明模块依赖(最常用)

1️⃣ 依赖其他模块

module com.example.app {
    requires com.example.service;
}

表示:

  • com.example.app 模块
  • 依赖 com.example.service 模块

⚠️ 只能依赖已导出的包


三、导出包(让别人用你)

module com.example.service {
    exports com.example.service.api;
}
  • 只有 exports 的包,其他模块才能 requires 后使用

四、常见依赖修饰符

1️⃣ requires transitive(传递依赖)

module com.example.service {
    requires transitive com.example.util;
}

效果:

  • 别人 requires com.example.service
  • 自动也能用 com.example.util

✅ 适合“API 中用到别的模块类型”的情况


2️⃣ requires static(编译期依赖)

requires static com.example.optional;
  • 编译时需要
  • 运行时可以不提供

✅ 用于可选依赖(如日志实现)


3️⃣ exports ... to(限定导出)

exports com.example.internal to com.example.test;
  • 只暴露给指定模块

✅ 提高封装性


五、使用外部模块(编译 & 运行)

编译

javac -d out \
  --module-path libs \
  module-info.java ...

运行

java --module-path libs \
     --module com.example.app/com.example.app.Main

六、依赖 JDK 模块

JDK 本身也是模块:

module com.example.app {
    requires java.sql;
    requires java.logging;
}

七、模块未找到常见原因

❌ Module not found

  • module-path 没包含 jar
  • 模块名写错
  • jar 没有 module-info.java 且未自动模块化

八、非模块化 jar 怎么办?

方案 1:放进 classpath(不推荐模块项目)

java -cp libs/xxx.jar ...

方案 2:当作自动模块

--module-path libs
  • 无名 jar → 自动模块名(来自 MANIFEST.MF 或文件名)

九、示例完整结构

app/
 ├── module-info.java
 └── com/example/app/Main.java

service/
 ├── module-info.java
 └── com/example/service/api/Service.java

app/module-info.java

module com.example.app {
    requires com.example.service;
}

service/module-info.java

module com.example.service {
    exports com.example.service.api;
}

十、总结一句话

Java 模块依赖 = requires + exports + module-path

如果你愿意,可以告诉我:

  • 你是 Maven / Gradle 项目?
  • 是 Spring Boot 还是纯 Java?
  • 遇到的是 具体报错 还是想了解设计?

我可以直接给你可跑的示例。

向AI问一下细节

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

AI
助
手