Javaagent 抛出 java.lang.NoClassDefFoundError: java/sql/PreparedStatement with java 15

问题描述

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

解决方法

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

,

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