8 回答

TA贡献1851条经验 获得超3个赞
The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.
正如javadoc中解释的那样,NoClassDefFoundError出现的原因是问题类在编译时是存在的,但在之后(如运行时)找不到。结合你的实际,我认为可能会有两种情况导致了改错误:
就像楼上有人说的那样,如果是web工程,调试时本地发布时jar包缺失,检查本地发布路径下的jar包是否有缺失。
引入的jar包自身有问题,如果jar包(com.alibaba.platform.shared:fasttext-sec:1.3.99)本身含有错误,编译时虽能定位到class,但在运行时该class由于包含错误没能被JVM或Classloader加载(错误通常发生在静态块或静态成员上),也会导致该错误。举个例子:
// Demo.javapublic class Demo { static int num = 1 / 0; ... }
如果jar包中包含Demo类,在外部调用Demo时,编译时不会有错误提示,但运行时会出现NoClassDefFoundError错误。

TA贡献1873条经验 获得超9个赞
楼主的问题有点诡异。让我猜测一下,由于楼主用的是maven,因此eclipse里面的项目应该分成多个模块了,而楼主在eclipse启动这个程序,应该是运行某个模块里面的一个含有main方法的类,而这个模块里面应该也有一个pom.xml。
在eclipse调试程序的时候,记得在pom.xml里面引入一些dependency。并且这些dependency的scope应该是runtime
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>aaa-xxx</artifactId>
<version>${project.parent.version}</version>
<scope>runtime</scope>
</dependency>
以上纯属猜测。

TA贡献1772条经验 获得超6个赞
应该很有可能是类加载的问题。虽然运行时有这个加载这个类,但是可能是由别的什么classloader加载的。
你加上 Thread.currentThread().getContextClassLoader(), 断点看下classes中都有哪些类,还有parent中的classes等,如果找不到SSRFChecker,你就要检查下代码上下文了,是不是有对classloader的设置
java类加载简单来说是先从parent中搜索,如果找不到再从当前classloader搜索,如果再找不到则抛出classnotfoundexception。搜"java 类加载机制" 了解更多
P.S. 这中问题在OSGI环境简直不要太常见
添加回答
举报