SpringBoot多模块引用报错

在这里插入图片描述

一. 问题背景

如下图所示,gmall项目里面有common、portal、redis3个模块。gmall项目为pom,portal模块为jar,portal引用common模块中的某些类。 把portal运行在Linux服务器上面,发送请求到portal时,portal需要使用common的某些类,报错了。 然而在本地idea运行时是不会报错的。

在这里插入图片描述

二. 前言

关于报错的原因,笔者不能百分百的确定,也不保证下面列出的解决方案能百分百解决大家的难题。具体问题具体分析吧。

三. 解决方案

需要将项目打成jar或war的,一律使用spring-boot-maven-plugin打包(不要用maven-compiler-plugin)。 无需打成jar或war的,无需引用maven插件打包

gmall的pom.xml以及gmall-portal的pom.xml,修改都如下:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

gmall-common无需打成jar或者war,它是提供给其他模块调用的常用工具类,所以无需加spring-boot-maven-plugin插件

四. maven-compiler-plugin与spring-boot-maven-plugin的区别

4.1 maven-compiler-plugin

使用maven-compiler-plugin插件可以 指定项目源码的jdk版本、编译后的jdk版本以及编码。可以将项目打成普通的jar

4.2 spring-boot-maven-plugin

Spring Boot Maven plugin能够 将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。

五. 报错的原因

上面讲了两个maven插件的区别。如果不限定只用springboot的maven插件打包,普通的maven插件也打了包,那么最后完成打包的插件打出来的包会覆盖先完成打包的插件打出来的包。即有时候可执行的common模块jar包会覆盖了普通的common模块jar包,导致有时候其他模块引用了common的可执行jar会出错,会导致模块间调用报错的。因此限定需要打成jar或war的模块都使用springboot的maven插件打包。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值