【问题标题】:How to solve java.lang.NoClassDefFoundError如何解决 java.lang.NoClassDefFoundError
【发布时间】:2019-01-08 10:10:43
【问题描述】:

我正在开发一个应用程序,用户在表单中输入他/她的信息,并将该表单的信息插入到 Google Cloud MySQL 数据库中。我编写了代码来实现上述任务,如下所示: `

package com.example.dao;

import java.sql.Connection;
import java.sql.DriverManager;

public class dao {
    private static Connection con;
    public static Connection getcon(){
        try{
            String instanceConnectionName = "edu-vitae1";
            String databaseName = "eduvitae";
             String username = "root";
             String password = "root";
             Class.forName("com.mysql.jdbc.Driver");
             String jdbcUrl = String.format(
             "jdbc:mysql://google/eduvitae?cloudSqlInstance=edu-vitae-211606:asia-south1:edu-vitae1&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=root&password=root&useSSL=false",
                  databaseName,
                  instanceConnectionName);
             //Connection con=DriverManager.getConnection("jdbc:mysql://google/eduvitae?cloudSqlInstance=edu-vitae-211606:asia-south1:edu-vitae1&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false&user=root&password=root");
             Connection con = DriverManager.getConnection(jdbcUrl, username, password);
             //con=DriverManager.getConnection("jdbc:mysql://35.200.134.221/edu","root","root");
        }
        catch (Exception e) {
            System.out.println(e);
        }
        return con;
    }

}

执行上述代码后,出现以下错误:

java.sql.SQLException: java.lang.NoClassDefFoundError: com/mysql/cj/protocol/SocketFactory
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:430)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.example.dao.dao.getcon(dao.java:20)
at com.example.model.register.doPost(register.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

我正在使用 Google Cloud Engine,我的应用程序在 JDK 1.8.0_131 上运行。我已包含“mysql-socket-factory-connector-j-8-1.0.10.jar”、“mysql-connector-java” -8.0.11.jar”和“jetty-unixsocket-9.4.8.v20171121.jar”在我的应用程序的构建路径中。
请帮助我理解和解决这个问题。
提前谢谢你。

【问题讨论】:

  • 代替println(e),您可以尝试使用e.printStackTrace() 来查看整个堆栈吗?
  • 感谢@MattClark 的建议。我在进行更改后更新了帖子。
  • 它无法在构建路径中找到那些库。你能把你完整的项目示例放在 github 或其他地方分享吗?
  • 从本站下载 Jar 并将其添加到项目库中。jar-download.com/…
  • @NitishkumarSingh 抱歉,我无法与您分享我的项目,因为这是我的实习项目。谢谢您的建议

标签: java mysql eclipse google-cloud-platform forms http-post


【解决方案1】:

关于错误Why am I getting a NoClassDefFoundError in Java?的一些信息

就我而言,我通过将 mylib.jar 添加到服务器上的“tomcat 9 dir/lib”文件夹和本地类路径(在 Eclipse 属性 > Java 构建路径 > 库->添加外部 JAR 中)解决了这个问题...)。您能描述一下您是如何添加罐子的吗?

【讨论】:

  • 感谢您的建议。我已按照您描述的方式将 jar 文件包含在我的项目中,但仍然出现错误。
  • @user10136991,我已经从 WEB-INF/lib 文件夹中删除了我的 jar,并且在启动 tomcat 时出现“Caused by: java.lang.ClassNotFoundException”。但是为什么你没有得到我不能说的错误。
【解决方案2】:

我通过在 WEB-INF/lib 文件夹中插入指定的 jar 文件解决了这个错误。我在项目的构建路径中添加了 jar 文件,但因为它不在 WEB-INF/lib 文件夹中,jvm 无法加载类。
所以总结一下,每当你在项目的构建路径中添加文件时,请记住将相同的文件复制到 WEB-INF/lib 文件夹中。

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 1970-01-01
    • 2018-07-30
    • 2016-08-26
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多