用 jar -jar 启动就没问题,用 Idea 启用就会有以下报错

333 天前
 imyasON

Caused by: java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseDeleteProvider.<init>()

nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseDeleteProvider.dynamicSQL). Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseDeleteProvider

百度上让我在启动类 @MapperScan 的包从 import org.mybatis.spring.annotation.MapperScan; 改为 import tk.mybatis.spring.annotation.MapperScan;
但是我的的版本就没有这个文件 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency>

2497 次点击
所在节点    程序员
21 条回复
Goooooos
333 天前
一般是依赖问题,classpath 存储两个不同版本的包,且两个包都有相同的类,可以试试 maven-enforcer-plugin 检查是否有冲突的依赖
https://www.mojohaus.org/extra-enforcer-rules/banDuplicateClasses.html
ebony0319
333 天前
```java
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>

```

```java
import tk.mybatis.spring.annotation.MapperScan;



@MapperScan(basePackages = "com.xxx.mapper")
@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```

```java

import org.apache.ibatis.annotations.Mapper;
import tk.mybatis.mapper.common.BaseMapper;

@Mapper
public interface xxxMapper extends BaseMapper<xxx> {
}
```

注意那个 MapperScan 是 tk 的,两个名字一样。
imyasON
333 天前
@ebony0319 我换成你的版本,改成 tk 还是报错了,真不知道咋回事,但是用 cmd 去-jar jar 包就是好的
imyasON
333 天前
@Goooooos 我复制过去了 但是不会用
burymme11
333 天前
你用了 tk.mybatis 这个框架,引入的 spring start 也是 tk.mybatis 的吗?
Seulgi
333 天前
打包的 jar 启动没问题,那一般就是 idea 的 maven 缓存有问题。清一下 idea 缓存和索引,重启一下
imyasON
333 天前
@Seulgi maven clean 了,idea 我清下试试
@burymme11 是吧
testliyu
333 天前
我之前也有过这个问题,但是一直没解决掉,一直用 java 命令启动了。
imyasON
333 天前
我刚刚试着把版本换成能改成 import tk.mybatis.mapper.common.BaseMapper; java -jar 也不行了。 但是改回原本的 1.3.1 java -jar 恢复正常。( idea 缓存也请了,maven 也 clean 了,离谱)
KOMA1NIUJUNSHENG
333 天前
一个依赖一个依赖的检查,大概率依赖的冲突。
imzcg2
333 天前
imyasON
333 天前
@imzcg2 链接文章第一个不适合我,我就引了正文提到的一个 pom ,第二个也不适用,1.x 的版本没有 tk...会报红,升级文中版本号 可以改 tk ,这样的话 java-jar 这一种方式也坏掉了
sephiroka
333 天前
几种 idea 特殊问题解决方法,我一直以来习惯
1 、清除 idea 缓存并重启
2 、maven/gradle 重新导入依赖,极端一点,删除 .m2 目录下所有已下载依赖
3 、克隆源码新建项目,其实也是重新导入依赖
4 、最后都不行了,利用 idea 插件分析依赖冲突问题
imyasON
333 天前
@testliyu
@sephiroka 我妥协了,搞不定,cmd 凑合用
hooych
333 天前
IDEA 配置的 maven 和 path 配置的 maven 可能不是同一个。
imyasON
333 天前
Dlin
333 天前
你的依赖应该冲突问题。你的热部署插件 加载的类是没有这个方法的版本。
Dlin
333 天前
你可以尝试启动后 arthas 反编译看看加载的类是不是缺少这个方法。
Dlin
333 天前
热部署建议使用 jrebel ,spring 官方的用起来多多少少会有些问题,每次还要重新加载 class 后热重启。
imyasON
333 天前
@Dlin 我试试,水平有限,能知道你说的我的项目问题,但是我没有排查过,不知道咋弄

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1011103

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX