为什么我无法获得org.h2.Driver?我用maven

时间:2015-09-02 08:15:53

标签: java maven jdbc classpath h2

我遇到连接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()); 
           }
    }
}

始终显示未找到的类:org.h2.Driver

6 个答案:

答案 0 :(得分:25)

您应该将范围设置为运行时,以便将h2驱动程序打包在war文件中:

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:1)

在这里remove the runtime scope

找到了答案
///custom cards

  Widget card(String image) {
    return  Container(
        child:  Image.asset(
              image,
              fit: BoxFit.cover,
            ),

        decoration: BoxDecoration(
          border: Border.all(color: Colors.blue, width: 2.0),
          color: Colors.white,
          borderRadius: BorderRadius.all(
            Radius.circular(5.0),
          ),
          boxShadow: <BoxShadow>[
            new BoxShadow(
              color: Colors.blue,
              blurRadius: 3.0,
              offset: new Offset(0.0, 3.0),
            ),
          ],
        ),
        margin: EdgeInsets.all(5.0),
        height: 150.0,
        width: 100.0,

    );
  }

答案 3 :(得分:1)

如果除了测试之外有人不想使用 h2,请保留 <scope>test</scope>,将其删除片刻,让 IDE 理解您的行,然后将范围放回原处。 如果这没有帮助,请尝试重新启动 IDE。

曾在 IntelliJ IDEA 工作。

答案 4 :(得分:0)

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

ThreadFactory threadFactory = Executors.defaultThreadFactory(); ThreadPoolExecutor executorPool = new ThreadPoolExecutor(2, 4, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(2), threadFactory, rejectionHandler); -它不起作用 ThreadFactory-有效

答案 5 :(得分:0)

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

  1. 首先从依赖项中删除作用域标签。看起来像
col-*

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

您也可以尝试这些

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

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

<version>1.4.192</version> 
<version>1.4.195</version>
<version>1.4.197</version>