温馨提示×

温馨提示×

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

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

java Module模块怎么卸载

发布时间:2026-10-30 18:47:54 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 9+ 的 Module System(JPMS) 里,需要先明确一点:

Java 模块(Module)本身不是“安装/卸载”的概念,而是编译期和运行期使用的类路径(module path)概念。
所谓“卸载模块”,通常是指 不再使用某个模块,而不是像操作系统那样“卸载”。

下面按常见场景说明。


一、运行 / 编译时“移除模块”

1️⃣ 不用某个模块(最直接)

只要 不在 module-path 或 --add-modules 中指定它 即可。

java --module-path mods -m com.example/app

如果你之前这样用:

java --add-modules java.xml.bind ...

现在去掉 --add-modules 就相当于“卸载”。


2️⃣ 显式禁用某个模块

java --limit-modules java.base,java.sql ...

--limit-modules 会限制 JVM 只加载指定模块,其余模块不可用。


二、从 JDK 中“移除”模块(高级)

⚠️ 不推荐普通项目这么做

1️⃣ JDK 自带模块(如 java.xml.bind)

Java 9 以后,很多旧模块被标记为 deprecated / removed:

  • java.xml.bind(JAXB)
  • java.activation
  • java.corba

这些在较新 JDK 中已经不存在,无需卸载。


2️⃣ 使用 jlink 创建“精简 JRE”

你可以生成一个不包含某些模块的运行时:

jlink \
  --module-path $JAVA_HOME/jmods \
  --add-modules java.base,java.logging \
  --output myjre

这样生成的 myjre 就没有其他模块。

✅ 这是“真正意义上”的模块裁剪。


三、自己写的模块怎么“卸载”

如果你是自己写的模块(jar with module-info):

方式一:从 module-path 移除 jar

# 之前
java --module-path mods -m com.foo/app

# 之后
rm mods/com.foo.jar

方式二:Maven / Gradle

直接 删除依赖:

<!-- 删除这个 -->
<dependency>
  <groupId>com.foo</groupId>
  <artifactId>foo</artifactId>
</dependency>

四、运行时动态“卸载模块”?

❌ Java 不支持运行时卸载 Module

  • ModuleLayer 创建后不可变
  • 类加载器可以卸载类,但 Module 本身不行

只能通过:

  • 创建新的 ModuleLayer
  • 丢弃旧 layer(GC)

五、总结一句话

目标 做法
不用某个模块 不加到 module-path
禁用模块 --limit-modules
删除 JDK 模块 用 jlink
自己模块 删 jar / 删依赖
运行时卸载 ❌ 不支持

如果你能具体说:

  • 是 JDK 模块 还是 自己写的模块
  • 是 运行期 / 编译期 / 打包
  • 用的 Java 版本

我可以给你更精确的操作命令。

向AI问一下细节

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

AI
助
手