将 sun.reflect 包与 openjdk11 一起使用



有没有办法在OpenJDK11中使用sun.reflect,通过在"--add-exports"中添加一些东西?我们的代码失败了,因为 jide pkg 内部使用 sun.reflect 包,我正在尝试看看是否有办法让它工作。

我已经尝试过下面的方法,但这没有帮助。

"--

add-exports jdk.unsupported/sun.reflect=ALL-UNNAMED">

下面是一个例外,其中基础类引用sun.reflect.Reflection

java.lang.NoClassDefFoundError: sun/reflect/Reflection

我遇到了这个问题,并使用较新版本的 jide 修复了它。从 jide-whatever:3.2.3 更改为 jide-whatever:3.7.6 足以使其在我的情况下工作。

如果你不能迁移到更新的版本,解决方案是围绕Throwable((.getStackTrace(([n].getClass((做一个包装器,并将其放在WEB-INF/classes文件夹中

这是简单的解决方法。它在许多情况下都有效。

package sun.reflect;
public class Reflection {
public static Class<?> getCallerClass(int n){
StackTraceElement[] elements = new Throwable().getStackTrace();
return elements[n].getClass() ;
}
}

https://github.com/rafaljot/NoClassDefFoundError-sun-reflect-Reflection

当您更新 jar 的版本时,可以修复此问题。

最新更新