本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目

这是一个排错的经验分享贴子。

最近在跟着知识星球做项目,到最后是部署到服务器,使用的方式是打包jar包上传到服务器运行。

但在实际打包的过程中,出现了本地IDEA可运行,jar包不可运行的错误。

具体错误截图如下:

可以发现,错误是ClassNotFoundException

于是我顺藤摸瓜找到了打包后的对应Jar包,找到我出错误的相关jar包,jackson相关的依赖,发现确实没有这个jar包。

很奇怪,于是我找到本地的IDEA,发现依旧没有这个类

(IDEA运行时候的容错率比较高,有时候可以正常运行,但打包要绝对严谨,缺少类或者版本不一致绝对会报错的)

可是我的项目(父项目)设定了版本号2.15.2,按理来说这个版本是会有这个类的。

java 复制代码
<!-- 版本号统一管理 -->
    <properties>
        ... ...
 
        <!--jackson工具,用于将出入参转化为json字符串-->
        <jackson.version>2.15.2</jackson.version>

		... ...

    </properties>

    <!-- 统一依赖管理 -->
    <dependencyManagement>
        <dependencies>
           ... ...

            <!-- jackson工具,用于将出入参转化为json字符串 -->

                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                    <version>${jackson.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-core</artifactId>
                    <version>${jackson.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-annotations</artifactId>
                    <version>${jackson.version}</version>
                </dependency>

				... ...
        </dependencies>
    </dependencyManagement>

子模块之间的依赖也没有出问题,为何没有导入Jar包呢?

搜索了很多资料后,我怀疑是:版本冲突

在控制台执行代码如下:

bash 复制代码
mvn dependency:tree | Select-String -Pattern "jackson"

这句话的意思是找到所有jackson的jar包,通过这个命令,可以找到它的版本号,查看是否存在版本号不一致的问题。

控制台输出以下内容:

以上是部分内容截图,可以看到,jackson有的相关jar包版本号为2.15.2,有的则为2.13.1,出现了版本号冲突,并且低版本的2.13.1确实会相比于2.15.2版本缺少一些类。

那么为什么会出现这种情况,我已经定义了版本号,为何没有按照这个来呢?

排查了很久,我发现是springboot版本的问题。

父pom文件里,我将版本号设置为2.6.3

在导入Jar包的时候,会按照对应的版本导入,由于版本号太低,无法导入2.15.2版本的Jackson,而是按照对应版本导入了2.13.1版本

解决办法

在启动类里,将版本号更改为更高的2.6.6。

(注意:父项目的版本号和子模块版本号是可以不一致的)

java 复制代码
      <!-- Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.6.6</version>
        </dependency>

这次我终于成功导入了Jar包

相关推荐
_oP_i18 分钟前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx21 分钟前
android sqlite 数据库简单封装示例(java)
android·java·数据库
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
FF在路上3 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
众拾达人3 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.3 小时前
Mybatis-Plus
java·开发语言
不良人天码星3 小时前
lombok插件不生效
java·开发语言·intellij-idea