V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
imyasON
V2EX  ›  程序员

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

  •  
  •   imyasON · 2024-01-24 10:34:27 +08:00 · 2544 次点击
    这是一个创建于 370 天前的主题,其中的信息可能已经有所发展或是发生改变。

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