【问题标题】:java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource in IntelliJ while it works fine in Eclipsejava.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource 在 IntelliJ 中,而它在 Eclipse 中工作正常
【发布时间】:2016-10-28 10:38:24
【问题描述】:

我制作了一个简单的 Java EE 应用程序,但我在连接数据库时遇到了问题。 在 Eclipse 中一切正常,但是当我在 Intellij 中尝试同样的操作时,会出现错误。

package db;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

public class DbUtil {
private static DbUtil dbUtil;
private ComboPooledDataSource connectionPool;

private DbUtil() throws PropertyVetoException {
    connectionPool = new ComboPooledDataSource();
    connectionPool.setDriverClass("com.mysql.jdbc.Driver");
    connectionPool.setJdbcUrl("jdbc:mysql://localhost:3306/world");
    connectionPool.setUser("root");
    connectionPool.setPassword("root");

    connectionPool.setInitialPoolSize(5);
    connectionPool.setMinPoolSize(5);
    connectionPool.setMaxPoolSize(20);
    connectionPool.setAcquireIncrement(5);
    connectionPool.setMaxIdleTime(3600);
}

public Connection getConnection() throws SQLException {
    return connectionPool.getConnection();
}

public void close() {
    connectionPool.close();
}

public static DbUtil getInstance() {
    if (dbUtil == null) {
        try {
            dbUtil = new DbUtil();
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }
    return dbUtil;
}
  }

在项目结构中-> 我拥有的库: image

错误是:

java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/ComboPooledDataSource
java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource

【问题讨论】:

  • 如果那些“库”代表镜像中的jar文件,至少你还需要mchange-commons-java 0.2.11或更高版本的jar。

标签: jakarta-ee intellij-idea classnotfoundexception c3p0


【解决方案1】:

已经很久了,但我遇到了同样的问题,这个解决方案奏效了。

project_name/web/WEB-INF/ 创建名为lib的新文件夹,复制.jars c3p0-0.9.5.2, c3p0-oracle-thin-extras-0.9.5.2, mchange-commons-java-0.2.11,然后在项目视图中选择lib文件夹,最后选择Add as liblary...

【讨论】:

    【解决方案2】:

    只需将此依赖项添加到 pom 文件中

        <dependency>
            <groupId>com.google.code.maven-play-plugin.com.mchange</groupId>
            <artifactId>c3p0-oracle-thin-extras</artifactId>
            <version>0.9.5</version>
        </dependency>
    
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>mchange-commons-java</artifactId>
            <version>0.2.11</version>
        </dependency>
    
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
    

    【讨论】:

      【解决方案3】:

      这可能是因为 servlet 配置

      bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
      

      将hibernate的c3p0 jar下载到lib并添加到jar中

      http://www.java2s.com/Code/Jar/c/Downloadc3p0090jar.htm

      【讨论】:

        【解决方案4】:

        我遇到了这个问题,但我试过了,我的休眠 jar 文件位于不同的文件夹中。实际上,它们必须位于 lib 文件夹中,但我创建了一个名为 hibernate 的新文件夹。那是错误的。你必须把你的jar文件放在lib文件夹中!

        【讨论】:

          【解决方案5】:

          对不起,情况不一样!没有 JEE 服务器!它只是一个独立的 Java 应用程序。一个小应用程序,直到现在人们都习惯于通过“java -jar -cp mysql-connector-java-8.0.27.jar xxx.jar”启动但是这很容易出错并且需要安装 jre!所以我使用了 jpackage,它构建了一个 name.exe 文件,可以像任何其他 Windows 程序一样启动,并且集成了所有必需的 java 模块。 mysql-connector.jar 不是模块化的,应用程序配置文件中给出的类路径显然不起作用!所以我的问题是针对那些可能对 jpackage 以及最终相关问题有经验的人。 除此之外,我正在将 mysql-connector 的源代码转换为模块并以这种方式集成。可能会奏效,但这肯定不是发明者的想法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-05-11
            • 1970-01-01
            • 2017-02-16
            • 2019-06-09
            • 1970-01-01
            • 1970-01-01
            • 2017-04-27
            • 2020-11-03
            相关资源
            最近更新 更多