自 Java 9 起,出现了多版本 JAR ( MRJARS ),允许将不同 Java 版本的不同类包含在一个 JAR 文件中。当运行在 Java 11 上的 Wildfly 14 执行 WAR 中包含的 JAR 中的 Java-8 代码时,我感到很惊讶,尽管该 JAR 是带有 Java 11 代码的 MRJAR。作为常规 Java SE 项目的依赖项包含的 JAR 根据正在运行的 JRE 运行不同的代码,但当包含在 WAR 中时,Java-11 代码似乎会被忽略。
这是 Web 服务器的预期行为吗,因为 Java EE 8 没有明确要求 Java 9(引入了 MRJAR)而只要求 Java 8?在较新的 Java 版本上运行时是否有其他网络服务器能够正确读取 MRJAR?或者 MRJAR 只是 Java SE 的一项功能?
如果我理解 Wildfly documentation正确的是,WAR 的所有内容都由同一个类加载器(根据我的调试器的 org.jboss.modules.ModuleClassLoader)加载,所以也许该类加载器没有正确读取包含的 JAR?
最佳答案
好吧,我的 Bug 报告导致了修复,所以现在 Wildfly 确实支持部署 WAR 中的 MRJAR :)
关于java - 哪些应用程序服务器支持 WAR 中的多版本 JAR(如果有)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53300848/