java.lang.NoClassDefFoundError: com/alipay/api/AlipayRequest

背景

我把支付模块部署在linux平台上之后,发现无法调用成功,通过观察Catalina.sh发现该模块运行出错误了,主要是以下两个错误:

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/pay]]
java.lang.NoClassDefFoundError: com/alipay/api/AlipayRequest

解决

我在CSDN上面看到一位小伙伴的文章:关于 Caused by: java.lang.NoClassDefFoundError: com/alipay/api/AlipayApiException 解决办法,它说可能是支付宝的jar包你没有引入,我想到支付宝jar包是在static下面放着呢,如下图:
在这里插入图片描述
在pom.xml文件中找该jar包的方法是:
在这里插入图片描述
本地运行是没有错误的,但是在linux平台上该模块就启动失败了,所以我估计打war包的时候支付宝的jar包没有打进去,然后我进入linux平台中支付模块所在的tomcat中的webapps—》WEB-INF—》lib,发现里面确实没有支付宝的jar包,如下图:
在这里插入图片描述
然后我通过rz命令去上传了支付宝jar包,重新启动tomcat,没有在出现错误了,估计是模块运行的时候只会去总jar包文件夹下面找jar包,由于打war包的时候没有把支付宝宝jar包打进去,那就无法找到该jar包了,最终导致运行错误

解惑

当前时间是2023-07-02,这篇文章是2年之前写的,当时只知道去解决问题,但是不知道产生问题的原因是什么,也就是没有抓住问题的本质,最近在看《Maven实战》这本书,发现了原因,所以来解答一下两年前自己留下的坑

由于上述依赖的scope属性是system(系统依赖范围),该依赖范围只在编译、测试时有效,但是在运行时无效,详细解释请看:《Maven实战》P64 表5-1“依赖范围与classpath的关系”

对于springboot项目来说,如果在打包时想要将scope属性为system的jar包打包,那就需要在pom.xml中添加以下配置:

注意:以下为pom.xml文件中的配置
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- start 允许引入本地jar包 -->
            <configuration>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <!-- end 允许引入本地jar包 -->
        </plugin>
        ……
    </plugins>
    ……
</build>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值