Tomcat 9是否支持Java 9模块?Java 11环境Web应用部署疑问
Tomcat 对 Java 9 模块系统(JPMS)的支持说明
核心结论
Tomcat 9 及后续所有稳定版本均未针对 Web 应用提供 Java 9 模块系统的原生支持,但可以正常运行在 Java 9 及以上版本(包括你正在使用的 Java 11)的运行环境中。
Tomcat 官方未提及模块支持的原因是其类加载器架构仍沿用传统的基于类路径(classpath)的双亲委派模型,没有适配 JPMS 的模块路径加载逻辑,不支持将 Web 应用作为 JPMS 模块直接加载运行。
可行的替代解决方案
- 沿用传统 Web 应用部署模式
不需要为你的项目添加module-info.java模块描述文件,按照标准 Servlet 项目结构开发,将所有依赖 Jar 包放置在WEB-INF/lib目录下即可,该模式在 Tomcat 9 + Java 11 环境下完全兼容,是目前的主流选择。 - 模块化代码兼容部署
如果你已经基于 JPMS 拆分了业务代码,可以将编译完成的带module-info.class的模块 Jar 包直接放入WEB-INF/lib目录,Tomcat 类加载器会自动忽略模块描述文件,按普通类路径资源加载,不需要修改业务代码。 - 替换运行时容器(仅当必须使用 JPMS 全特性时选择)
如果你需要用到模块隔离、模块服务发现等 JPMS 原生能力,可以选择适配 JPMS 的 Servlet 容器,或者改用支持模块化打包运行的开发框架。
内容的提问来源于stack exchange,提问作者Chirota
相关产品推荐
相关产品推荐

