问题:Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
项目打包,对应的依赖打不进项目包中
今天,新到手一个公司项目,idea启动和打包用tomcat启动都报错。
nested exception is java.lang.RuntimeException: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
分析问题
从打包的项目中看,mysql-connector-java包,没有打进到项目的lib中。
- 查看pom.xml文件
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
看起来没问题,尝试添加上对应的包版本,也还是不行。
2. 一顿操作,突然发现,maven目录下的依赖,mysql-connector-java包,后边有个(test)。如下图:感觉就是这个狗屎东西的原因。
3. 网上查理一下:
感谢“shyrainxy”写的:关于dependency的scope用法的博客
dependency的scope有这么几种:
- test,在测试的时候有效,在编译和打包的时候是不生效的
- provide,测试和编译的时候有效,打包的时候不生效
- compile,默认,编译和打包的时候都有效
解决问题
- 把pom.xml对应的jar包添加scope范围即可。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>compile</scope>
</dependency>
- 更改后maven目录下的依赖,mysql-connector-java包,后边(test)消失了。
重启项目,OK了。
待解决疑问点
“shyrainxy”写的:关于dependency的scope用法的博客
描述说:compile,默认,编译和打包的时候都有效。也就是说,不写scope的话,默认是compile。但我这个包,默认是test,后续知道后,再补充这里。