找不到方法 sun.misc.Unsafe.defineClass

Posted

技术标签:

【中文标题】找不到方法 sun.misc.Unsafe.defineClass【英文标题】:Unable to find method sun.misc.Unsafe.defineClass 【发布时间】:2019-09-18 23:59:25 【问题描述】:

我正在使用jdk-10.0.2gradle 4.7,我在构建我的项目时遇到了这个错误。

    Unable to find method 'sun.misc.Unsafe.defineClass(Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class;'.

Possible causes for this unexpected error include:
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)

The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)

Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.

In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

【问题讨论】:

在 JDK 9 中删除了已弃用的 Unsafe.defineClass,建议使用 Lookup.defineClass。请参阅 JDK 9 发行说明:oracle.com/technetwork/java/javase/… 【参考方案1】:

我有同样的问题(但使用JDK 11):

找不到方法 'sun.misc.Unsafe.defineClass(Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class;'。

与您一样使用版本gradle 4.7

我的gradle-wrapper.properties 文件是:

    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
    distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip

为了解决这个问题,我使用参数 distributionUrl 更改为 4.9 版本的包装器:

 distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip

并在没有任何错误的情况下重建项目。

【讨论】:

【参考方案2】:

Gradle 中 .gradle 文件的依赖有问题。 或 pom.xml 文件(如果您使用的是 Maven)。 造成这种情况的原因可能有很多: 版本,或冲突两次声明相同的依赖项。 要不然 检查您添加到库中的 jar_file 版本。

【讨论】:

【参考方案3】:

你是否指定了here提到的模块依赖?从 JDK 9 开始,Unsafe API 似乎被隐藏了。

因此,添加

module jdk.unsupported 
    exports sun.misc;
    opens sun.misc;
    ...

对您的项目可能会有所帮助。

【讨论】:

我使用 java --list-modules 查看了模块列表,然后将此代码放入 jdk.unsupported@10.0.2 模块(已经存在)我还需要做什么?因为我仍然收到错误消息。 您只提供错误消息,没有提供错误发生位置的信息。如果你不能提供Minimal, Complete, and Verifiable example我们只能猜测。

以上是关于找不到方法 sun.misc.Unsafe.defineClass的主要内容,如果未能解决你的问题,请参考以下文章

java运行中找不到main方法

java运行中找不到main方法

IDEA中Gradle构建失败找不到类路径的解决方法!

java 中 “找不到符号”的错误

Android Studio 3.0以上找不到Android Device Monitor的解决/替代方法

Maven之后找不到同级目录下的方法了