如图所示代码截图,我再调试项目的时候,在这行:
SSRFChecker ssrfChecker = SSRFChecker.instance;
跑出了异常,异常信息为:
java.lang.NoClassDefFoundError: com/alibaba/fasttext/sec/url/SSRFChecker
可是我的项目中,明明有import com.alibaba.fasttext.sec.url.SSRFChecker;并且你看我的jar包中也有这个类的啊,编译的时候也是通过的,我已经clean rebuild了若干次,并且重启了服务若干次,关机重启了若干次,还是出现这个问题。
非常困惑,为什么编译的时候没有问题,调试的时候,到这行就会抛这个异常信息呢?求大神解答。。谢谢~~
说明,我的jar包是maven仓库导入的:
<dependency>
<groupId>com.alibaba.platform.shared</groupId>
<artifactId>fasttext-sec</artifactId>
<version>1.3.99</version>
</dependency>
回答楼下的,我编译后的jar包里是有的。
正如javadoc中解释的那样,NoClassDefFoundError出现的原因是问题类在编译时是存在的,但在之后(如运行时)找不到。结合你的实际,我认为可能会有两种情况导致了改错误:
就像楼上有人说的那样,如果是web工程,调试时本地发布时jar包缺失,检查本地发布路径下的jar包是否有缺失。
引入的jar包自身有问题,如果jar包(com.alibaba.platform.shared:fasttext-sec:1.3.99)本身含有错误,编译时虽能定位到class,但在运行时该class由于包含错误没能被JVM或Classloader加载(错误通常发生在静态块或静态成员上),也会导致该错误。举个例子:
如果jar包中包含Demo类,在外部调用Demo时,编译时不会有错误提示,但运行时会出现NoClassDefFoundError错误。