【问题标题】:Why I can't get the org.h2.Driver? I use maven为什么我无法获取 org.h2.Driver?我用maven
【发布时间】:2015-11-27 15:42:02
【问题描述】:

我在连接到 H2 时遇到问题

这是我的 pom.xml:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>.</groupId>
    <artifactId>dbConnection</artifactId>
    <name>Db Connection</name>
    <packaging>war</packaging>
    <version>0.1</version>

    <dependencies>
        <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.3.176</version>
        </dependency>
    </dependencies>


</project>

这是我的主要代码

import java.sql.*;

public class DbConnection 
{
   static final String DB_URL = "jdbc:h2:tcp://localhost/~/test;AUTO_SERVER=TRUE";

   public static void main(String[] args) throws Exception
   {
        try
           { 
                Class.forName("org.h2.Driver");          
                Connection conn = DriverManager.getConnection(DB_URL,"sa","");  
                conn.close();
           }
       catch(ClassNotFoundException ex)
           {
                System.out.println( "ERROR: Class not found: " + ex.getMessage()); 
           }
    }
}

总是显示 Class not found:org.h2.Driver

【问题讨论】:

  • 我假设运行maven生成的jar时出现异常?您输出的 jar 是否包含驱动程序文件?

标签: java maven jdbc classpath h2


【解决方案1】:

您应该将作用域设置为运行时,以便将 h2 驱动程序打包到您的 war 文件中:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.190</version>
    <scope>runtime</scope>
</dependency>

【讨论】:

    【解决方案2】:

    我在使用 IntelliJ 时遇到了同样的问题,它找不到 org.h2.Driver。我尝试了几种来自网络的解决方案,但在 IntelliJ 简单重启后问题就解决了。

    希望这有助于节省一些时间。

    【讨论】:

    • 我正在使用 VS Code,有时也会发生这种情况,即使从终端运行 mvn install 也可以。重启 VS Code 确实可以解决问题。
    • 这就是我所需要的,然后它就起作用了。
    【解决方案3】:

    在这里找到答案remove the runtime scope

    <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            #removed this -> <scope>test</scope> #
        </dependency>
    

    【讨论】:

      【解决方案4】:

      我的问题出在 docker-compose.yaml 环境变量中的“”中:

      SPRING_DATASOURCE_DRIVER-CLASS-NAME="org.h2.Driver" - 它不起作用 SPRING_DATASOURCE_DRIVER-CLASS-NAME=org.h2.Driver - 有效

      【讨论】:

        【解决方案5】:

        我已阅读所有可用的答案并尝试了所有答案。我不确定哪个有效,但是是的,它终于奏效了。因此,请尝试其中一种或全部,但它会解决您的问题。

        1. 首先从您的依赖项中删除范围标记。它看起来像
        <scope>test</scope>
        

        <scope>runtime</scope>
        
        1. 版本控制可能存在一些问题。我正在使用这个
        <version>1.4.190</version>
        

        你也可以试试这些

        <version>1.4.192</version> 
        <version>1.4.195</version>
        <version>1.4.197</version>
        
        1. 重新启动几次也可能会有所帮助。我做了 2-3 次。

        最后,我的依赖看起来像下面的代码。

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.190</version>
        </dependency>
        

        【讨论】:

          【解决方案6】:

          如果有人不想在测试之外使用 h2,请保留 &lt;scope&gt;test&lt;/scope&gt;,只需将其删除一会儿,让 IDE 了解您的行,然后将范围放回原处。 如果这没有帮助,请尝试重新启动 IDE。

          曾在 IntelliJ IDEA 工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多