java - 无法将裸骨 webapp 部署到运行 openjdk 11 的 tomee 7.1.0
问题描述
我计划将 webapp 从 java 8/tomee 7.0.4 迁移到 java 11/tomee 7.1.0,但仍然不成功。所以我编写了一个只有一个 facelet 页面和一个托管 bean 的准系统 webapp。这适用于 java 10/tomee 7.1.0 但不适用于 java 11。错误是:
java.lang.IllegalStateException: Cannot get Unsafe.defineClass
....
java.lang.NoSuchMethodException: sun.misc.Unsafe.defineClass(java.lang.String, [B, int, int, java.lang.ClassLoader, java.security.ProtectionDomain)
经过一番谷歌搜索,从http://tomee-openejb.979440.n4.nabble.com/Some-jars-in-TomEE-8-SNAPSHOT-are-not-Java-11-compatible-td4685162.html似乎问题源于 jaxb-impl。所以我尝试根据https://winterbe.com/posts/2018/08/29/migrate-maven-projects-to-java-11-jigsaw/添加到 pom.xml 中,但失败了。我恢复了 pom.xml 并根据Java 11 包 javax.xml.bind 不存在进行了修改,这也失败了。
这适用于不太受欢迎的 tomee 服务器。但是 tomee 7.1.0 是基于 tomcat 8.5 的,应该更受欢迎。我认为问题仍然是一样的。
建议表示赞赏,我认为很多人应该有同样的问题。
解决方案
尝试将您的 tomcat/tomee 升级到最新版本,或降级您的 Java 版本,因为不兼容的版本往往会引发这些NoSuchMethod/NoSuchFile
异常。
可能是一种技术依赖于某种其他技术,并且知道某个 API 版本,但您正在尝试使用更高的 API 版本,这可能完全不同。
另一种可能性是 tomee 还没有准备好与 java 11 一起工作(但这似乎不太可能)。
推荐阅读
- java - GraphQL 禁用输入验证,添加自定义错误
- javascript - 改变打开和关闭导航菜单的方向
- javascript - Javascript将图像上传到画布上
- reactjs - 检测 React Web App Safari 中的方向变化
- oracle - 关于实时统计 oracle 19c 仅适用于特定表
- discord.js - 狙击命令没有显示最后删除的消息
- reactjs - 如何将 Redux-Store 发送到多个组件?
- c++ - 以二进制形式读取文件,将其压缩并以二进制形式写回
- python - 将 df 中的列值与具有特定格式的另一个 df 的列值匹配?
- python-3.x - 将 pdf 文件页面转换为图像 - Wand