I've 2 maven projects in my Eclipse (v4.7.0) workspace.
The first project contains some utility stuffs and holds the connection to my MySQL database through JDBC driver.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>dbtools</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>DBTools</name>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- JDBC for MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</project>
This first project is built as a jar and it is included in the second project (that contains the main application) as a maven dependency as shown in the pom.xml below:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>mainapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>MainApp</name>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<jersey2.version>2.25.1</jersey2.version>
<jaxrs.version>2.0.1</jaxrs.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.6.1</version>
<configuration>
<filesets>
<fileset>
<directory>C:/apps/tomcat/webapps/mainapp</directory>
<includes>
<include>**</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-appCtx</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>C:/apps/tomcat/webapps/</outputDirectory>
<overwrite>true</overwrite>
<resources>
<resource>
<directory>../mainapp/target</directory>
<includes>
<include>mainapp-0.0.1-SNAPSHOT.war</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- JAX-RS -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>${jaxrs.version}</version>
</dependency>
<!-- Jersey 2.25.1 -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey2.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey2.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey2.version}</version>
</dependency>
<!-- Local DBTool -->
<dependency>
<groupId>com.example</groupId>
<artifactId>dbtools</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
The 2nd project that is the main application is deployed as a war file. When I start the Tomcat (with 2nd app's war) I got a SQLException at runtime:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb?autoReconnect=true&useSSL=false
at java.sql.DriverManager.getConnection(DriverManager.java:689)
I've read several question here in StackOverflow about this exception but I still haven't found a working solution :(
Inside the lib folder of my Tomcat installation folder I've placed the mysql-connector-java-6.0.6.jar.
I've also noticed that in the JAR file of the first project (opening it as an archive) there isn't the JDBC connector inside. Is it normal?
Inside the first project, I make the connection this way:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/torre?autoReconnect=true&useSSL=false", "dbuser", "dbpass");
conn has type java.sql.Connection.
I've also tried to put:
Class.forName("com.mysql.jdbc.Driver");
before che "conn = ..." line but I got the same result :(
I'm using Tomcat 8.5 and JDK 1.8.
Any ideas how I can get rid of this problem? Am I missing something in the Maven or Eclipse build configuration?
Thanks in advance for your help! :)
mysql-connector*.jar
in you application folder - does it give you any result? E.g. webapps/<<your_application>>/WEB-INF/lib? Potentially it can be one more connector jar on the classpath, which came as transitive dependency. – OarWEB-INF/lib
so people could review any jars which could provide concurrent driver implementation? – Oartomcat/lib
. It works for me. The only thing which should be changed is connection properties from index.jsp file. For me it works. If it won't work for you it will mean that something is wrong with your environment rather than with code. And we will figure it out. After navigating to host:port/app it should create asample
table in the schema which you will set in index.jsp – Oar<scope>provided</scope>
to mysql driver in project1. Once this is done, then build project1 asmvn clean install
; later in project2mvn clean package
. – Mendicity