报错解决:gradle逆向工程出现Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

报错信息

在SpringBoot/SpringCloud环境下,利用gradle执行逆向工程过程中,出现了Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver错误信息!

错误原因

此时的build.gradle文件:

// 此时已经在父类工程中声明了com.thinkimi.gradle.MybatisGenerator插件
// 引入 mybatis-generator 插件
apply plugin: "com.thinkimi.gradle.MybatisGenerator"

archivesBaseName = 'atcrowdfunding09-member-entity'
bootJar.enabled = false

dependencies{
    // 此时lombok需要传递
    compileOnly 'org.projectlombok:lombok'

    /*******************以下依赖用于逆向工程,不需要用compile/api,依赖不参与传递**********************/
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter'
    implementation 'org.mybatis.generator:mybatis-generator-core:1.4.0'
    // 数据连接驱动
    implementation 'mysql:mysql-connector-java'
}

configurations {
    mybatisGenerator
}

//generator.xml文件路径
mybatisGenerator {
    verbose = true
    configFile = 'src/main/resources/generatorConfig.xml'
}

此时的模块依赖信息:

以下用于逆向工程需要的配置文件generatorConfig.xml的数据库连接部分的信息:

<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection
        driverClass="com.mysql.cj.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/project_crowd?serverTimezone=GMT"
        userId="root"
        password="*************">
</jdbcConnection>

一开始并不明白是哪里出的错,因为驱动版本为8.0.16,对应的驱动类名称就是com.mysql.cj.jdbc.Driver,并且参照网上的很多博客,gradle逆向工程部分的插件也没有问题。最后将 driverClass="com.mysql.cj.jdbc.Driver"改成了driverClass="com.mysql.jdbc.Driver",执行逆向生成任务,此时不再提示java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver,而是提示ssl连接的问题,此时说明在逆向工程执行过程中使用的jar包是低版本的mysql驱动!

下午8:43:16: Executing task 'mbGenerator --scan --scan --scan'...

Starting Gradle Daemon...
Gradle Daemon started in 501 ms

> Task :atcrowdfunding09-member-entity:mbGenerator
[ant:mbgenerator] Fri Dec 11 20:43:21 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
[ant:mbgenerator] Fri Dec 11 20:43:21 CST 2020 WARN: Caught while disconnecting...
[ant:mbgenerator] 
[ant:mbgenerator] EXCEPTION STACK TRACE:
[ant:mbgenerator] 
[ant:mbgenerator] 
[ant:mbgenerator] 
[ant:mbgenerator] ** BEGIN NESTED EXCEPTION ** 
[ant:mbgenerator] 
[ant:mbgenerator] javax.net.ssl.SSLException
[ant:mbgenerator] MESSAGE: closing inbound before receiving peer's close_notify
[ant:mbgenerator] 
[ant:mbgenerator] STACKTRACE:
[ant:mbgenerator] 
[ant:mbgenerator] javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
[ant:mbgenerator] 	at sun.security.ssl.Alert.createSSLException(Alert.java:133)
[ant:mbgenerator] 	at sun.security.ssl.Alert.createSSLException(Alert.java:117)
[ant:mbgenerator] 	at sun.security.ssl.TransportContext.fatal(TransportContext.java:340)

可是当前模块明明没有低版本mysql 的驱动,所以我在整个gradle仓库找到了低版本mysql连接驱动,并且删除了所有的低版本驱动驱动,然后再次执行逆向命令,发现一直会自动下载mysql-connector-java-5.1.47.jar并且不会存在与当前模块的依赖环境中,所以此操作是在构建过程中完成的!推测是MybatisGenerator插件的问题,于是我将所有的依赖全部清除,只保留插件,最后发现可以逆向生成成功!

源代码查看

逆向生成插件源码下载:mybatis-generator-plugin-2.2-sources.jar

一共就三个文件:

MybatisGeneratorTask.groovy

MybatisGeneratorExtension.groovy


MybatisGeneratorPlugin.groovy

解决方案

build.gradle
只需要用插件即可,所需的依赖,插件中已经声明!

plugins{
    // mybatis逆向工程需要的插件
    id "com.thinkimi.gradle.MybatisGenerator" version "2.2"
}

//引入 mybatis-generator 插件
apply plugin: "com.thinkimi.gradle.MybatisGenerator"

// 声明generatorConfig.xml地址
mybatisGenerator {
    configFile = 'src/main/resources/generatorConfig.xml'
}

generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- mybatis-generator:generate -->
    <context id="mysql" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是;false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://127.0.0.1:3306/project_crowd?useSSL=false"
                userId="root"
                password="qyb19970829">
        </jdbcConnection>

        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
            和 NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成Entity类的路径 -->
        <javaModelGenerator targetProject="src/main/java"
                            targetPackage="com.yuanbaoqiang.crowd.entity">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- targetProject:XxxMapper.xml映射文件生成的路径 -->
        <sqlMapGenerator targetProject="src/main/java"
                         targetPackage="com.yuanbaoqiang.crowd.mapper">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- targetPackage:Mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetProject="src/main/java"
                             targetPackage="com.yuanbaoqiang.crowd.mapper">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 数据库表名字和我们的entity类对应的映射指定 -->
        <table tableName="t_member" domainObjectName="MemberPO" />

    </context>
</generatorConfiguration>

最后生成的文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuanbaoQiang

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值