首页 > 解决方案 > MyBatis Generator 无法实例化自定义插件类

问题描述

我在 Spring Boot 2.1.9 + Gradle 项目中使用 MyBatis Generator 从 PostgreSQL DB 生成实体类和映射器类。
我添加了一些插件来生成注释和乐观锁。

我使用这个 MyBatis Generator Gradle 插件。
https://github.com/kimichen13/mybatis-generator-plugin

我使用这个插件来生成注释和乐观锁。
https://github.com/itfsw/mybatis-generator-plugin#17-%E4%B9%90%E8%A7%82%E9%94%81%E6%8F%92%E4%BB%B6

另外,我想实现一个生成器的自定义插件。

我的问题:
当我执行 Gradle 任务(./gradlew mbGenerator)时,发生错误并显示“无法实例化 com.example.demo.plugin.MyCustomPlugin 类型的对象”(←我的自定义插件名称)

当线:

<!-- My Custom Plugin -->
<plugin type="com.example.demo.plugin.MyCustomPlugin"/>

在下面的 generatorConfig.xml 被删除,生成器正常工作。

我应该怎么办?

我的 build.gradle 如下。

plugins {
    id 'org.springframework.boot' version '2.1.9.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
    id "com.thinkimi.gradle.MybatisGenerator" version "2.1.2"

}

group = 'com.example'
version = '0.0.1'
sourceCompatibility = '11'

mybatisGenerator {
    verbose = true
    configFile = "src/main/resources/generatorConfig.xml"

    dependencies {
        mybatisGenerator project(':')
        mybatisGenerator 'com.itfsw:mybatis-generator-plugin:1.3.7'
        mybatisGenerator 'org.mybatis.generator:mybatis-generator-core:1.3.7'
    }
}

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
    mybatisGenerator
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'
    implementation  'org.mybatis.generator:mybatis-generator-core:1.3.7'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'org.postgresql:postgresql'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testCompile("org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.1.0")
}

我的 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 >


    <context id="context1" >
        <!-- plugin to generate optimistic lock -->
        <plugin type="com.itfsw.mybatis.generator.plugins.OptimisticLockerPlugin">
            <property name="customizedNextVersion" value="false"/>
        </plugin>
        <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">
            <property name="@Data" value="true"/>
            <property name="@Builder" value="false"/>
            <property name="@AllArgsConstructor" value="false"/>
            <property name="@NoArgsConstructor" value="false"/>
            <property name="@Accessors(chain = true)" value="false"/>
            <property name="supportSuperBuilderForIdea" value="false"/>
        </plugin>

        <!-- plugin to generate annotation -->
        <plugin type="com.itfsw.mybatis.generator.plugins.MapperAnnotationPlugin">
            <property name="@Mapper" value="true"/>
            <property name="@Repository" value="true"/>
        </plugin>

        <!-- My Custom Plugin -->
        <plugin type="com.example.demo.plugin.MyCustomPlugin"/>

        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://localhost:5432/ec" userId="postgres" password="" />

        <javaModelGenerator targetPackage="com.example.demo" targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.demo" targetProject="src/main/resources"/>
        <javaClientGenerator targetPackage="com.example.demo" targetProject="src/main/java"
                            type="MIXEDMAPPER"/>

        <table schema="public" tableName="product" >
            <property name="useActualColumnNames" value="true" />
            <property name="customizedNextVersion" value="false"/>
            <property name="versionColumn" value="version"/>
        </table>
    </context>

</generatorConfiguration>

我的自定义插件 Java 类文件如下。

package com.example.demo.plugin;

import org.mybatis.generator.api.PluginAdapter;

import java.util.List;

public class MyCustomPlugin extends PluginAdapter {

    @Override
    public boolean validate(List<String> warnings) {
        return true;
    }

    // TODO do something
}

标签: javamybatisspring-mybatismybatis-generator

解决方案


您应该在 pom.xml 中添加依赖项

      <dependency>
        <groupId>com.itfsw</groupId>
        <artifactId>mybatis-generator-plugin</artifactId>
        <version>${mybatis.generator.itfsw.plugin.version}</version>
      </dependency>

参考:https ://github.com/itfsw/mybatis-generator-plugin/issues/6


推荐阅读