本地可运行,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包

相关推荐
xUxIAOrUIII12 分钟前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home15 分钟前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
醇氧17 分钟前
org.jetbrains.annotations的@Nullable 学习
java·开发语言·学习·intellij-idea
Java&Develop20 分钟前
Aes加密 GCM java
java·开发语言·python
JIngJaneIL1 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
专注VB编程开发20年1 小时前
C#全面超越JAVA,主要还是跨平台用的人少
java·c#·.net·跨平台
南_山无梅落1 小时前
9.Python3集合(set)增删改查和推导式
java·开发语言
爱笑的眼睛112 小时前
超越MSE与交叉熵:深度解析损失函数的动态本质与高阶设计
java·人工智能·python·ai
全靠bug跑2 小时前
Spring Cloud OpenFeign 实战三部曲:快速集成 · 连接池优化 · 客户端抽取
java·spring boot·openfeign