我计划将WebApp从Java 8/Tomee 7.0.4迁移到Java 11/Tomee 7.1.0,但仍然没有成功。因此,我写了一个只有一个facelet页面和一个托管的bean的准排骨网站。这可以在Java 10/Tomee 7.1.0但不能使用Java上作用。错误是:
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.n4.nabble.com/some-jars-inbome-in-tome-8-snapshot-8-snapshot-are-are-not-java-not-java-11-compatible-td4685162.html似乎该问题起源于JAXB-IMPL。因此,我尝试根据https://winterbe.com/posts/2018/08/29/migrate-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一起使用(但这似乎不太可能)。