【问题标题】:JNI error: sun.misc.Unsafe.defineClass: name or signature does not matchJNI 错误:sun.misc.Unsafe.defineClass:名称或签名不匹配
【发布时间】:2021-12-31 05:36:47
【问题描述】:
java/lang/NoSuchMethodError:
  Method sun.misc.Unsafe.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class;
  name or signature does not match

见下图:

添加org.aspectj依赖后一切正常,但是是什么原因呢?

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.8.0</version>
</dependency>

【问题讨论】:

  • 欢迎来到 SO。请善意地向试图帮助您的人提供一些反馈。如果它解决了您的问题,请接受答案。如果您对答案有不明白之处,请在 cmets 中提出后续问题。什么都不说根本就不是很有礼貌。

标签: java java-native-interface aop aspectj


【解决方案1】:

查看 Java 1.8.0.262-ga 的源代码,Unsafe.defineClass 的特定重载不再存在。它之前已被弃用,到 262 年它已被完全删除。

大概您之前使用的 AspectJ 运行时版本正在使用已删除的重载。你现在的版本大概是更新的......并且不再使用删除的重载。

【讨论】:

    【解决方案2】:

    实际上,堆栈跟踪中更有趣的部分是:

    java/lang/NoClassDefFoundError: org/aspectj/lang/Signature
    

    原因是您的代码(至少部分)是用 AspectJ 编译器编译的。为了让 AspectJ 工作,您需要在类路径上安装 AspectJ 运行时。到目前为止,一切都很简单。

    顺便说一句,如果您想使用 AspectJ 1.8.x 来支持 Java 8,那么 1.8.13 将是最新的 pre-Java-9 版本。但您也可以使用 1.9.x,例如 1.9.7 (Java 16) 甚至 1.9.8.RC3 (Java 17),这两者都应该仍然与 Java 8 完全兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2022-06-30
      相关资源
      最近更新 更多