从 Java 9 开始,有 Multi-Release JAR ( MRJARS ) 允许将不同 Java 版本的不同类包含在一个 JAR 文件中。当在 Java 11 上运行的 Wildfly 14 在 WAR 中包含的 JAR 中执行 Java-8 代码时,我感到很惊讶,尽管 JAR 是带有 Java 11 代码的 MARJAR。作为常规 Java SE 项目的依赖项包含的 JAR 正在运行不同的代码取决于运行的 JRE,但是当包含在 WAR 中时,Java-11 代码似乎被忽略了。
这是 Web 服务器的预期行为吗,因为 Java EE 8 没有明确要求 Java 9(引入了 MRJAR),而只需要 Java 8?在较新的 Java 版本上运行时,是否有其他网络服务器可以正确读取 MRJAR?还是 MRJAR 只是 Java SE 的一个特性?
如果我正确理解了Wildfly 文档,那么 WAR 的所有内容都由同一个类加载器(根据我的调试器为 org.jboss.modules.ModuleClassLoader)加载,那么该类加载器可能无法正确读取包含的 JAR?