V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imyasON
V2EX  ›  程序员

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

  •  
  •   imyasON · 95 天前 · 2199 次点击
    这是一个创建于 95 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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>

    21 条回复    2024-01-24 19:22:31 +08:00
    Goooooos
        1
    Goooooos  
       95 天前
    一般是依赖问题,classpath 存储两个不同版本的包,且两个包都有相同的类,可以试试 maven-enforcer-plugin 检查是否有冲突的依赖
    https://www.mojohaus.org/extra-enforcer-rules/banDuplicateClasses.html
    ebony0319
        2
    ebony0319  
       95 天前
    ```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
        3
    imyasON  
    OP
       95 天前
    @ebony0319 我换成你的版本,改成 tk 还是报错了,真不知道咋回事,但是用 cmd 去-jar jar 包就是好的
    imyasON
        4
    imyasON  
    OP
       95 天前
    @Goooooos 我复制过去了 但是不会用
    burymme11
        5
    burymme11  
       95 天前
    你用了 tk.mybatis 这个框架,引入的 spring start 也是 tk.mybatis 的吗?
    Seulgi
        6
    Seulgi  
       95 天前
    打包的 jar 启动没问题,那一般就是 idea 的 maven 缓存有问题。清一下 idea 缓存和索引,重启一下
    imyasON
        7
    imyasON  
    OP
       95 天前
    @Seulgi maven clean 了,idea 我清下试试
    @burymme11 是吧
    testliyu
        8
    testliyu  
       95 天前
    我之前也有过这个问题,但是一直没解决掉,一直用 java 命令启动了。
    imyasON
        9
    imyasON  
    OP
       95 天前
    我刚刚试着把版本换成能改成 import tk.mybatis.mapper.common.BaseMapper; java -jar 也不行了。 但是改回原本的 1.3.1 java -jar 恢复正常。( idea 缓存也请了,maven 也 clean 了,离谱)
    KOMA1NIUJUNSHENG
        10
    KOMA1NIUJUNSHENG  
       95 天前
    一个依赖一个依赖的检查,大概率依赖的冲突。
    imzcg2
        11
    imzcg2  
       95 天前
    imyasON
        12
    imyasON  
    OP
       95 天前
    @imzcg2 链接文章第一个不适合我,我就引了正文提到的一个 pom ,第二个也不适用,1.x 的版本没有 tk...会报红,升级文中版本号 可以改 tk ,这样的话 java-jar 这一种方式也坏掉了
    sephiroka
        13
    sephiroka  
       95 天前
    几种 idea 特殊问题解决方法,我一直以来习惯
    1 、清除 idea 缓存并重启
    2 、maven/gradle 重新导入依赖,极端一点,删除 .m2 目录下所有已下载依赖
    3 、克隆源码新建项目,其实也是重新导入依赖
    4 、最后都不行了,利用 idea 插件分析依赖冲突问题
    imyasON
        14
    imyasON  
    OP
       95 天前
    @testliyu
    @sephiroka 我妥协了,搞不定,cmd 凑合用
    hooych
        15
    hooych  
       95 天前
    IDEA 配置的 maven 和 path 配置的 maven 可能不是同一个。
    Dlin
        17
    Dlin  
       95 天前
    你的依赖应该冲突问题。你的热部署插件 加载的类是没有这个方法的版本。
    Dlin
        18
    Dlin  
       95 天前
    你可以尝试启动后 arthas 反编译看看加载的类是不是缺少这个方法。
    Dlin
        19
    Dlin  
       95 天前
    热部署建议使用 jrebel ,spring 官方的用起来多多少少会有些问题,每次还要重新加载 class 后热重启。
    imyasON
        20
    imyasON  
    OP
       95 天前
    @Dlin 我试试,水平有限,能知道你说的我的项目问题,但是我没有排查过,不知道咋弄
    testliyu
        21
    testliyu  
       95 天前
    @imyasON #14 idea 有 maven 启动方式,可以吧 java-jar 写到那里面去,然后启动前触发一下 mvn install
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3182 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:21 · PVG 20:21 · LAX 05:21 · JFK 08:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.