松鸦 java.lang.NoClassDefFoundError
Jaybird java.lang.NoClassDefFoundError
可能我问的是一个常见问题,但当我尝试通过 Jaybird 连接我的 Firebird DB 时,我真的不明白我做错了什么以及我可能忘记了什么。我已将 Jaybird.jar 添加到我的 Java 构建路径,但仍然出现错误 java.lang.NoClassDefFoundError。
这是我的简单代码:
public class DBHelper {
public void tryConnect() {
try {
Class.forName("org.firebirdsql.jdbc.FBDriver");
} catch (ClassNotFoundException cnfe) {
System.out.println(cnfe.toString());
System.out.println("org.firebirdsql.jdbc.FBDriver not found");
}
}
}
如果没有完整的异常消息,这是一个猜测,但您可能会收到错误 "java.lang.NoClassDefFoundError: javax/resource/ResourceException",这意味着您是缺少所需的依赖项 connector-api-1.5.jar
(包含在 Jaybird 分发 zip 的 lib 文件夹中)。
您有两个选择:
- 将
connector-api-1.5.jar
添加到类路径,或
- 改用
jaybird-full-2.2.7.jar
(它包含 connector-api-1.5.jar
中的 类)。
部署到应用程序服务器时不需要这样做,因为它已经提供了连接器-api。当 运行 是独立应用程序时,您应该只使用 jaybird-full-2.2.7.jar
;部署到应用程序服务器时,javax.resource
包中 类 的存在可能会阻止类加载器使用您的 jar/war 文件。
另见 Jaybird release notes, section Distribution package。
全面披露:我是 Jaybird 的开发者
可能我问的是一个常见问题,但当我尝试通过 Jaybird 连接我的 Firebird DB 时,我真的不明白我做错了什么以及我可能忘记了什么。我已将 Jaybird.jar 添加到我的 Java 构建路径,但仍然出现错误 java.lang.NoClassDefFoundError。
这是我的简单代码:
public class DBHelper {
public void tryConnect() {
try {
Class.forName("org.firebirdsql.jdbc.FBDriver");
} catch (ClassNotFoundException cnfe) {
System.out.println(cnfe.toString());
System.out.println("org.firebirdsql.jdbc.FBDriver not found");
}
}
}
如果没有完整的异常消息,这是一个猜测,但您可能会收到错误 "java.lang.NoClassDefFoundError: javax/resource/ResourceException",这意味着您是缺少所需的依赖项 connector-api-1.5.jar
(包含在 Jaybird 分发 zip 的 lib 文件夹中)。
您有两个选择:
- 将
connector-api-1.5.jar
添加到类路径,或 - 改用
jaybird-full-2.2.7.jar
(它包含connector-api-1.5.jar
中的 类)。
部署到应用程序服务器时不需要这样做,因为它已经提供了连接器-api。当 运行 是独立应用程序时,您应该只使用 jaybird-full-2.2.7.jar
;部署到应用程序服务器时,javax.resource
包中 类 的存在可能会阻止类加载器使用您的 jar/war 文件。
另见 Jaybird release notes, section Distribution package。
全面披露:我是 Jaybird 的开发者