Java MyBatis生成器无法实例化自定义插件类

Java MyBatis生成器无法实例化自定义插件类,java,mybatis,spring-mybatis,mybatis-generator,Java,Mybatis,Spring Mybatis,Mybatis Generator,我在Spring Boot 2.1.9+Gradle项目中使用MyBatis生成器从PostgreSQL DB生成实体类和映射器类。 我添加了一些插件来生成注释和乐观锁 我使用这个MyBatis生成器Gradle插件。 我使用此插件生成注释和乐观锁。 此外,我想实现生成器的自定义插件 我的问题: 当我执行Gradle任务(./gradlew mbGenerator)时,发生了一个错误并显示 “无法实例化com.example.demo.plugin.MyCustomPlugin类型的对象”(

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

我使用这个MyBatis生成器Gradle插件。

我使用此插件生成注释和乐观锁。

此外,我想实现生成器的自定义插件

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

当线路:

<!-- My Custom Plugin -->
<plugin type="com.example.demo.plugin.MyCustomPlugin"/>
我的generatorConfig.xml如下所示

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")
}
<?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>
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
}

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

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")
}
<?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>
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
}
package com.example.demo.plugin;
导入org.mybatis.generator.api.PluginAdapter;
导入java.util.List;
公共类MyCustomPlugin扩展了PluginAdapter{
@凌驾
公共布尔验证(列出警告){
返回true;
}
//做点什么
}

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

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

com.itfsw

我从未在Gradle上尝试过,但在Maven上,自定义插件需要放在一个单独的JAR中,并添加到依赖项列表中。谢谢您的评论。当我为Mybatis插件创建子项目并将其添加到依赖项列表时,该插件工作正常。不创建子项目就不可能创建自定义插件吗?我想是的,但可能有一种方法我不知道。