joker
joker

Reputation: 211

Why I can't get the org.h2.Driver? I use maven

I face a problem about connecting to H2

this is my 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>

and this is my main code

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()); 
           }
    }
}

is always show up that Class not found:org.h2.Driver

Upvotes: 21

Views: 55463

Answers (6)

Luca Pasini
Luca Pasini

Reputation: 149

If anyone doesn't want to use h2 aside from testing, keeping the <scope>test</scope>, just remove it for a moment, let IDE understand your line, and then put the scope back in. If that doesn't help try restarting IDE.

Worked in IntelliJ IDEA.

Upvotes: 1

Sidharth K.Burnwal
Sidharth K.Burnwal

Reputation: 546

I have read all the answers available and tried all of them. I am not sure which one worked but yes, It worked at last. So, try one of these or all but it will solve your problem.

  1. Remove the scope tag from your dependency first. It will look like
<scope>test</scope>

or

<scope>runtime</scope>
  1. There might be some issues with versioning.Mine working with this
<version>1.4.190</version>

you can also try these

<version>1.4.192</version> 
<version>1.4.195</version>
<version>1.4.197</version>
  1. Restart a few times might also help. I did for 2-3 times.

Finally, my dependency looks like the below code.

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

Upvotes: 3

burtsevyg
burtsevyg

Reputation: 4086

My problem was in "" in docker-compose.yaml environment variables:

SPRING_DATASOURCE_DRIVER-CLASS-NAME="org.h2.Driver" - it does not work SPRING_DATASOURCE_DRIVER-CLASS-NAME=org.h2.Driver - it work

Upvotes: 0

mikelus
mikelus

Reputation: 1039

Found the answer here remove the runtime scope

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

Upvotes: 7

Vitalii
Vitalii

Reputation: 11091

I had the same problem with IntelliJ, it could not found org.h2.Driver. I tried several solutions from web but after simple restart of IntelliJ the problem was solved.

Hope this helps to save some time.

Upvotes: 29

Marko Jurisic
Marko Jurisic

Reputation: 854

You should set scope to runtime so that h2 driver is packaged in your war file:

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

Upvotes: 36

Related Questions