Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
在导入项目时你是否会碰到这种情况:在别人的电脑上运行正常,自己的电脑上会报:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 错误?
如springboot分模块开发:web模块(用内嵌tomcat)与core模块
- 在应用分模块的情况下:如core模块包含servic与dao,core模块的pom.xml中含有
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
- web模块包含core模块的pom.xml中含有
maven会把core模块的依赖一块导入进web模块,按道理是可以加载com.mysql.jdbc.Driver,<dependency> <groupId>com.test</groupId> <artifactId>core</artifactId> <version>1.0.0</version> </dependency>
但此时启动项目就会出现错误提示(一般都是IDE开发环境不同导致的,我猜想是maven/gradle等构建插件环境不同导致的,至少在我的IDE开发环境下会出现这个情况): Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver错误。明显的tomcat类加载器加载时不能加载到了com.mysql.jdbc.Driver驱动 但如果web模块导入mysql依赖且scope用provided(就是在编译是参与,打包时不参与添加到jar包内):
<dependency> <groupId>com.test</groupId> <artifactId>core</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> <scope>provided</scope> </dependency>
这样就不会提示Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver错误。
当添加一个是scope为provided的MySQL驱动依赖,provided是编译是参与,打包时不参与,但问题竟然解决了,tomcat类加载器加载时加载到了com.mysql.jdbc.Driver驱动。应该是maven在编译阶段core模块添加了对mysql驱动的应用,所以在web项目启动时类加载加载到了mysql驱动。maven不太精通,所以也不具体分析了。
- 避免上面的情况发生:
gradle可以用gradle包装器解决。 maven我想有插件可以解决吧,maven不是很懂。
正文到此结束