问题描述
我正在使用:
- 野蝇21
- Java 11
我刚刚经历了模块化(使用 Java 9 模块)在 Wildfly 21 上运行的 Jakarta EE EAR 应用程序的痛苦。这个应用程序有一个war jar、ejb jar、实用程序 jar(现在都有 module-info.java
)和其他第三方库。整个应用程序编译良好,没有错误。
但是我注意到在Wildfly中运行的时候,虽然运行没有问题,但是和之前不是模块化的时候一样,但是好像应用服务器没有考虑现在是模块化的应用,没有使用modulepath运行应用程序,但类路径。因此,在运行时,应用程序的模块化特性被忽略了。
有没有办法指示应用服务器以模块化方式运行应用程序,使用模块路径而不是类路径?
遗憾的是,我们不得不被 Wildfly 等应用服务器锁定,阻止我们在应用程序运行时使用如此重要的 Java 功能(模块)。
解决方法
虽然 Wildfly 不支持运行模块化战争,但您可以查看 Piranha Cloud。
Piranha Server 本身可以在模块路径中运行,并且可以在新的 JPMS 层中部署 WAR,尊重提供的 module-info.class。
https://piranha.cloud/blog/2021/20210128_Modular_applications_with_JPMS
PS:我是 Piranha Cloud 开发人员