温馨提示×

温馨提示×

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

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

怎样使用java Module模块

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

在 Java 9 及以后版本 中引入了 Java Platform Module System(JPMS,即 Java Module),用来替代传统的 classpath 机制,提供更强的封装和依赖管理。

下面从 概念 → 创建 → 使用 → 编译运行 → 常见问题 给你一个完整说明。


一、什么是 Java Module

一个 Module 是一个有名字的代码单元,包含:

  • module-info.java(模块描述文件,必须)
  • 一组 package
  • 明确声明:
    • 依赖哪些模块(requires)
    • 导出哪些包(exports)

相比 classpath:

  • ✅ 强封装(不导出的包外部不能用)
  • ✅ 显式依赖
  • ✅ 更好的可维护性

二、最小 Module 示例

1️⃣ 目录结构

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

2️⃣ module-info.java

module com.example.app {
    // 当前模块依赖的模块
    requires java.base; // 默认就有,可省略

    // 导出包,供其他模块使用
    exports com.example.app;
}

3️⃣ Main.java

package com.example.app;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello Module!");
    }
}

三、编译 Module

javac \
  -d out \
  src/com.example.app/module-info.java \
  src/com.example.app/com/example/app/Main.java

四、运行 Module

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

输出:

Hello Module!

五、多模块项目示例

目录结构

project/
 ├── src/
 │   ├── com.example.service/
 │   │   ├── module-info.java
 │   │   └── com/example/service/Service.java
 │   └── com.example.app/
 │       ├── module-info.java
 │       └── com/example/app/Main.java

service 模块

// module-info.java
module com.example.service {
    exports com.example.service;
}
package com.example.service;

public class Service {
    public String hello() {
        return "Hello from Service";
    }
}

app 模块

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

import com.example.service.Service;

public class Main {
    public static void main(String[] args) {
        System.out.println(new Service().hello());
    }
}

编译 & 运行

javac -d out $(find src -name "*.java")

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

六、常用 module-info 指令

指令 作用
requires 模块名; 依赖某模块
requires transitive 模块名; 依赖并传递
exports 包名; 导出包
exports 包名 to 模块A,模块B; 限定导出
opens 包名; 运行时反射开放
uses 接口; 使用服务
provides 接口 with 实现; 提供服务

七、与 Maven / Gradle 集成

Maven(Java 11+)

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.11.0</version>
  <configuration>
    <release>17</release>
  </configuration>
</plugin>

只需在 src/main/java/module-info.java 写模块信息。


八、常见错误

❌ Package X is not visible

  • 忘记 exports
  • 或模块未 requires

❌ Module not found

  • --module-path 路径错误

❌ 反射失败

  • 需要用 opens

九、什么时候用 Module?

✅ 适合:

  • JDK 内部模块拆分
  • 大型项目
  • 微服务基础库
  • 需要强封装

❌ 不适合:

  • 小脚本
  • 老项目快速迁移

如果你愿意,我可以:

  • ✅ 帮你把 普通 Maven 项目改成 Module
  • ✅ 写一个 Spring Boot + Module 示例
  • ✅ 解释 Module vs Classpath 的区别

你现在是想用在什么项目里?

向AI问一下细节

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

AI
助
手