问题描述:
为了方便开发,今天在配置mybatis-plus的代码生成工具的时候,按照官网的使用教程引入以下jar包:
<dependency>
<groupId>com.zns</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
然后使用官网的代码按照自己的需求进行修改后:
@Test
public void testGenerator() {
GlobalConfig config = new GlobalConfig();
config.setActiveRecord(true)
.setAuthor("PH")
.setOutputDir("F:\\ideaProject\\einvoice\\src\\main\\java") //生成路径
.setFileOverride(false)//是否文件覆盖,如果多次
.setServiceName("%sService") //设置生成的service接口名首字母是否为I
.setIdType(IdType.AUTO) //主键策略
.setBaseResultMap(true)
.setBaseColumnList(true)
.setDateType(DateType.ONLY_DATE);
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL)
.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false")
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUsername("root")
.setPassword("root");
StrategyConfig stConfig = new StrategyConfig();
stConfig.setCapitalMode(true) // 全局大写命名
.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
.setInclude("t_test") //生成的表
.setEntityLombokModel(true)
.setEntityTableFieldAnnotationEnable(true);
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent("com.datanew.xxx")//父包名
.setController("controller")
.setEntity("beans")
.setService("service")
.setMapper("mapper");
//5.整合配置
AutoGenerator ag = new AutoGenerator().setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig);
ag.execute();
}
启动代码生成测试类报错:
java.lang.NoSuchFieldError: GAUSS
原因分析:
从execute方法进去打断点,控制台显示如下:
显示参数其中两个"java.lang.NoSuchFieldError",所以一开始觉得是配置有问题,检查过后是按照官网的形式来写的,所以配置出问题的可能性不大;因为之前做过其他测试时是正常的,只有在引入上面的jar包后才出了这个问题,所以立马去查看了pom依赖图:
果然找到这个jar包和 mybatis-plus 都包含 mybatis-plus-extension 这个包,因为mybatis-plus包版本是3.3.1,然后这里引入的generator jar包是3.3.2版本,所以jar包版本冲突(确切的说是重复,方法执行时不知道去引用哪一个,所以报java.lang.NoSuchFieldError)
解决方案:
将generator jar包版本改为3.3.1(和mybatis-plus版本一致)
后记:
因为是第一次记录,一个小问题,说的比较啰嗦,我觉得重要的事情有两点:1.解决问题的思路,不能盲目无措 2.问题大小都记录下来,就有助于培养这样的思维。
谨记,共勉!