Springboot 集成阿里短信 ClassNotFound的坑

问题描述

使用Springboot 在IDEA开发中正常,在服务器上报ClassNotFound。

问题定位

后台报错误日志如下

017-08-08 17:59:46.527 ERROR 22612 --- [nio-8083-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder] with root cause

java.lang.ClassNotFoundException: com.google.gson.GsonBuilder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) ~[na:1.8.0_31]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.8.0_31]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_31]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) ~[na:1.8.0_31]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_31]
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94) ~[msg-server-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_31]
    at com.aliyun.mns.model.serialize.topic.TopicMessageSerializer.getGson(TopicMessageSerializer.java:25) ~[aliyun-sdk-mns-1.1.8.jar!/:na]

首先查看IDEA上引入的包是由包含GSON包

其次使用Maven打包查看生成的Jar包中也包含GSON包。

没办法只好靠百度谷歌了,其中有一篇文章提到需要显示引入包来避开Springboot本身的bug

问题解决

在POM上添加GSON依赖(原GSON是由Ali短信客户端引入)

<dependency>
    <groupId>com.google.code.gsongroupId>
    <artifactId>gsonartifactId>
    <version>2.8.0version>
dependency>

重新打包上传OK

你可能感兴趣的:(spring-boot)