gpt4 book ai didi

java.lang.NoClassDefFoundError : org/skife/jdbi/v2/DBI 错误

转载 作者:行者123 更新时间:2023-11-28 22:30:11 28 4
gpt4 key购买 nike

我使用 JDBI 在我的计算机上本地创建了一个项目,它与数据库的接口(interface)没有任何问题。

我现在在 Tomcat 服务器上使用同一个项目。我正在使用 javac -cp "lib/*"cs5530/*.java 编译我的代码,其中 lib 包含我依赖的外部 jar,例如 jdbi-2.49.jar。

这段代码是我创建新 DBI 的地方。

public static DAO getDbConnection() {
MysqlDataSource ds = new MysqlDataSource();
ds.setServerName("server");
ds.setUser("user");
ds.setPassword("password");
ds.setDatabaseName("dbName");
DBI dbi = new DBI(ds);
return dbi.onDemand(DAO.class);
}

它调用了我的类构造函数:

public Customer() {
this.conn = getDbConnection();
}

这是我得到的错误:

java.lang.NoClassDefFoundError: org/skife/jdbi/v2/DBI
cs5530.Customer.getDbConnection(Customer.java:85)
cs5530.Customer.<init>(Customer.java:31)
org.apache.jsp._1_jsp._jspService(_1_jsp.java:105)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

那么,为什么它在看到必要的类时可以正常编译,然后在运行时出现问题,我该如何解决这个问题?

谢谢。

最佳答案

当 JVM 在其类路径中找不到匹配的类时,会发生 NoClassDefFoundError。它没有找到您的 jdbi 库。在编译时,您明确告诉 javac 在哪里可以找到该库,但在运行时 Tomcat 需要能够找到它,这意味着将它放在 Tomcat 知道寻找它的地方。

通常,Tomcat 希望在 webapps 文件夹下找到组织为单独 Web 应用程序的 Java 代码,这样应用程序 jar 就可以放在

 $CATALINA_HOME/webapps/whateveryourwebappnameis/WEB-INF/lib

应用程序的类文件将放在

 $CATALINA_HOME/webapps/whateveryourwebappnameis/WEB-INF/classes

public_html 在我看来像是一个放置 Java 类文件的奇怪地方。但是,如果您拥有的其他内容对您有用,请将 lib 文件夹移动到 WEB-INF 下。

关于java.lang.NoClassDefFoundError : org/skife/jdbi/v2/DBI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816328/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com