原创

Caused by: java.lang.ClassNotFoundException:  com.mysql.jdbc.Driver

在导入项目时你是否会碰到这种情况:在别人的电脑上运行正常,自己的电脑上会报:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 错误?

如springboot分模块开发:web模块(用内嵌tomcat)与core模块

  1. 在应用分模块的情况下:如core模块包含servic与dao,core模块的pom.xml中含有
    <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.48</version>
    </dependency>
    
  2. web模块包含core模块的pom.xml中含有
    <dependency>
         <groupId>com.test</groupId>
         <artifactId>core</artifactId>
         <version>1.0.0</version>
    </dependency>
    
    maven会把core模块的依赖一块导入进web模块,按道理是可以加载com.mysql.jdbc.Driver,
    但此时启动项目就会出现错误提示(一般都是IDE开发环境不同导致的,我猜想是maven/gradle等构建插件环境不同导致的,至少在我的IDE开发环境下会出现这个情况): Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver错误。明显的tomcat类加载器加载时不能加载到了com.mysql.jdbc.Driver驱动
  3. 但如果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不太精通,所以也不具体分析了。

  4. 避免上面的情况发生:
      gradle可以用gradle包装器解决。
      maven我想有插件可以解决吧,maven不是很懂。
    
正文到此结束
本文目录