在 Java 9+ 的 Module System(JPMS) 里,需要先明确一点:
Java 模块(Module)本身不是“安装/卸载”的概念,而是编译期和运行期使用的类路径(module path)概念。
所谓“卸载模块”,通常是指 不再使用某个模块,而不是像操作系统那样“卸载”。
下面按常见场景说明。
只要 不在 module-path 或 --add-modules 中指定它 即可。
java --module-path mods -m com.example/app
如果你之前这样用:
java --add-modules java.xml.bind ...
现在去掉 --add-modules 就相当于“卸载”。
java --limit-modules java.base,java.sql ...
--limit-modules 会限制 JVM 只加载指定模块,其余模块不可用。
⚠️ 不推荐普通项目这么做
Java 9 以后,很多旧模块被标记为 deprecated / removed:
java.xml.bind(JAXB)java.activationjava.corba这些在较新 JDK 中已经不存在,无需卸载。
jlink 创建“精简 JRE”你可以生成一个不包含某些模块的运行时:
jlink \
--module-path $JAVA_HOME/jmods \
--add-modules java.base,java.logging \
--output myjre
这样生成的 myjre 就没有其他模块。
✅ 这是“真正意义上”的模块裁剪。
如果你是自己写的模块(jar with module-info):
# 之前
java --module-path mods -m com.foo/app
# 之后
rm mods/com.foo.jar
直接 删除依赖:
<!-- 删除这个 -->
<dependency>
<groupId>com.foo</groupId>
<artifactId>foo</artifactId>
</dependency>
❌ Java 不支持运行时卸载 Module
ModuleLayer 创建后不可变只能通过:
ModuleLayer| 目标 | 做法 |
|---|---|
| 不用某个模块 | 不加到 module-path |
| 禁用模块 | --limit-modules |
| 删除 JDK 模块 | 用 jlink |
| 自己模块 | 删 jar / 删依赖 |
| 运行时卸载 | ❌ 不支持 |
如果你能具体说:
我可以给你更精确的操作命令。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。