java.lang.NoClassDefFoundError:java/sql/Driver?

问题描述 投票:0回答:3

我正在尝试构建一个登录注册网络应用程序,它本质上是让用户在数据库上注册,然后允许他们登录。我已经编写了所有代码,并且正在尝试将我的程序连接到我的数据库。这是我收到的错误:

Exception

javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

java.lang.NoClassDefFoundError: java/sql/Driver

我已将所有 Postgres、Tomcat 和 SQL 连接器/驱动程序 jar 添加到我的

classpath
和我的
WEB-INF/lib
文件夹中。我不太确定还能做什么。我尝试使用另一个类进行测试,并且能够连接到我的数据库。我还仔细检查了我的连接 URL。怎么了?

java postgresql jdbc classloader servletexception
3个回答
4
投票

如果您在运行 Jetpack compose 桌面应用程序时遇到此问题, 考虑将此行添加到

build.gradle.kts

compose.desktop {
    application {
        // ..
        nativeDistributions {
            // ...
            modules("java.sql")
        }
    }
}

1
投票

我知道这与 Servlet 无关,但我在使用 SQLite 的模块应用程序中遇到了同样的问题:

Exception in thread "main" java.lang.NoClassDefFoundError: java/sql/Driver
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:206)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:759)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:680)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:605)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
...
Caused by: java.lang.ClassNotFoundException: java.sql.Driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 14 more

一开始有点困惑,但我终于明白了。我只需将 java.sqlrequires 语句添加到

module-info.java
:

module mymodule {
    ...
    requires sqlite.jdbc;
    requires java.sql;
}

需要 sqlite.jdbc 已经在那里,为了清楚起见将其添加到上面)


-1
投票

对于 Kotlin Compose Multiplatform,这似乎属于“这是一个功能,而不是一个错误”类别。 philoopher97 已经发布了解决方案。

请参阅此处了解完整说明,包括如何配置 Proguard 的提示。

© www.soinside.com 2019 - 2024. All rights reserved.