温馨提示×

温馨提示×

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

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

java Module模块怎么配置

发布时间:2026-10-08 21:59:44 来源:亿速云 阅读:106 作者:小樊 栏目:编程语言

在 Java 9+ 中引入了 Module System(JPMS,Java Platform Module System),通过 module-info.java 来配置模块。下面从基本概念 → 配置方式 → 常见示例给你讲清楚。


一、什么是 Module

一个 Module(模块) 是一个有边界的包集合,明确声明:

  • 自己导出哪些包(exports)
  • 自己依赖哪些模块(requires)
  • 是否对外开放服务(provides / uses)

二、模块的基本结构

my-module/
 ├── src/
 │   └── com.example.mymodule/
 │       ├── module-info.java
 │       └── com/example/mymodule/
 │           └── Main.java
 └── out/

三、module-info.java 基本配置

1️⃣ 最简单的模块

module com.example.mymodule {
}

⚠️ 注意:

  • 模块名通常和包名一致(推荐)
  • module-info.java 必须放在 源代码根目录

四、常用指令说明

✅ exports(导出包)

只有导出的包,才能被其他模块访问。

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

❌ 未导出的包,其他模块 不可见


✅ requires(依赖模块)

module com.example.mymodule {
    requires com.example.othermodule;
}

传递依赖(transitive)

requires transitive com.example.othermodule;

依赖你的模块,也会自动依赖 othermodule


✅ requires static(可选依赖)

requires static com.example.optional;

编译时需要,运行时可以没有


✅ opens(反射开放)

opens com.example.mymodule.internal;

或只针对某个模块:

opens com.example.mymodule.internal to com.example.test;

✅ 用于:

  • 框架(Spring、Jackson)
  • 单元测试

✅ provides / uses(服务机制)

module com.example.service {
    uses com.example.spi.Service;
}

module com.example.impl {
    provides com.example.spi.Service
        with com.example.impl.ServiceImpl;
}

五、完整示例

模块 A(API)

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

模块 B(实现)

module com.example.impl {
    requires com.example.api;
    exports com.example.impl;
}

模块 C(主程序)

module com.example.app {
    requires com.example.api;
    requires com.example.impl;
}

六、编译 & 运行(命令行)

编译

javac -d out \
  src/com.example.api/module-info.java \
  src/com.example.api/com/example/api/*.java

运行

java --module-path out -m com.example.app/com.example.app.Main

七、Maven 中的模块配置

Maven 项目结构:

parent
 ├── module-api
 ├── module-impl
 └── module-app

每个模块:

<module>module-api</module>

并在代码中正常使用 module-info.java


八、常见坑

❌ 没有 exports → 类找不到
❌ 没有 requires → 编译错误
❌ 反射失败 → 加 opens
❌ JDK 老版本(<9)不支持 module


九、什么时候用 Module?

✅ 大型项目
✅ 微服务核心库
✅ 强封装需求
❌ 小工具、脚本项目(没必要)


如果你用的是 Spring Boot / Maven / Gradle / IDEA,或者想看 实战示例,告诉我你的使用场景,我可以直接给你对应配置。

向AI问一下细节

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

AI
助
手