8 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.
正如javadoc中解釋的那樣,NoClassDefFoundError出現(xiàn)的原因是問題類在編譯時(shí)是存在的,但在之后(如運(yùn)行時(shí))找不到。結(jié)合你的實(shí)際,我認(rèn)為可能會(huì)有兩種情況導(dǎo)致了改錯(cuò)誤:
就像樓上有人說的那樣,如果是web工程,調(diào)試時(shí)本地發(fā)布時(shí)jar包缺失,檢查本地發(fā)布路徑下的jar包是否有缺失。
引入的jar包自身有問題,如果jar包(com.alibaba.platform.shared:fasttext-sec:1.3.99)本身含有錯(cuò)誤,編譯時(shí)雖能定位到class,但在運(yùn)行時(shí)該class由于包含錯(cuò)誤沒能被JVM或Classloader加載(錯(cuò)誤通常發(fā)生在靜態(tài)塊或靜態(tài)成員上),也會(huì)導(dǎo)致該錯(cuò)誤。舉個(gè)例子:
// Demo.javapublic class Demo { static int num = 1 / 0; ... }
如果jar包中包含Demo類,在外部調(diào)用Demo時(shí),編譯時(shí)不會(huì)有錯(cuò)誤提示,但運(yùn)行時(shí)會(huì)出現(xiàn)NoClassDefFoundError錯(cuò)誤。

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
樓主的問題有點(diǎn)詭異。讓我猜測一下,由于樓主用的是maven,因此eclipse里面的項(xiàng)目應(yīng)該分成多個(gè)模塊了,而樓主在eclipse啟動(dòng)這個(gè)程序,應(yīng)該是運(yùn)行某個(gè)模塊里面的一個(gè)含有main方法的類,而這個(gè)模塊里面應(yīng)該也有一個(gè)pom.xml。
在eclipse調(diào)試程序的時(shí)候,記得在pom.xml里面引入一些dependency。并且這些dependency的scope應(yīng)該是runtime
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>aaa-xxx</artifactId>
<version>${project.parent.version}</version>
<scope>runtime</scope>
</dependency>
以上純屬猜測。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
應(yīng)該很有可能是類加載的問題。雖然運(yùn)行時(shí)有這個(gè)加載這個(gè)類,但是可能是由別的什么classloader加載的。
你加上 Thread.currentThread().getContextClassLoader(), 斷點(diǎn)看下classes中都有哪些類,還有parent中的classes等,如果找不到SSRFChecker,你就要檢查下代碼上下文了,是不是有對(duì)classloader的設(shè)置
java類加載簡單來說是先從parent中搜索,如果找不到再從當(dāng)前classloader搜索,如果再找不到則拋出classnotfoundexception。搜"java 類加載機(jī)制" 了解更多
P.S. 這中問題在OSGI環(huán)境簡直不要太常見
添加回答
舉報(bào)