【问题标题】:Javaagent throwing java.lang.NoClassDefFoundError: java/sql/PreparedStatement with java 15Javaagent 抛出 java.lang.NoClassDefFoundError: java/sql/PreparedStatement with java 15
【发布时间】:2021-04-18 12:59:48
【问题描述】:

Java 代理在使用 java 15 应用程序运行时抛出此错误,如果有人能解释为什么会出现这种情况,那将非常有帮助。

java.lang.NoClassDefFoundError: java/sql/PreparedStatement
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3325)
    at java.base/java.lang.Class.getDeclaredMethods(Class.java:2466)
.
.
.
.
.
Caused by: java.lang.ClassNotFoundException: java.sql.PreparedStatement
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 19 more

【问题讨论】:

  • 欢迎来到 SO。请注意了解MCVE 是什么以及它如何帮助他人重现您的问题并回答您的问题。然后编辑您的问题,并相应地改进它。具体来说,显示您的代码。没有人可以脱离上下文调试堆栈跟踪。还请解释为什么您认为这个问题是 Java 15 特有的。相同的代码是否在以前的 Java 版本上运行?如果有,是哪些?
  • 您的URLClassLoader 是否委托给平台类加载器?

标签: java javaagents


【解决方案1】:

找不到类当 JVM 在类路径上找不到类文件时发生异常。自动部署功能(auto-deployment="true")是错误的,或者类路径上没有类文件(sql jar)。如果您使用的是 Maven,只需检查 sql jar(准备好的语句类文件和 sql jar 文件)是否在类路径上。如果类文件不在类路径上,只需在类路径上手动添加类文件。它应该可以解决错误。

【讨论】:

    【解决方案2】:

    这意味着 java.sql.PreparedStatement 在编译时可用,但在运行时不可用。
    要解决此问题,请将 sql jar 添加到类路径中,如果您使用的是 maven,请在 pom.xml 中添加依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多