上下文是這樣的:我有所有靜態方法和靜態初始化塊的類。這個類是一個Web應用程序的一部分,該應用程序打包爲一個戰爭並部署在WebSphere 10內部。該類已被加載/使用後,是否可以引發NoClassDefFoundError?
有些情況下戰爭中的其他類試圖調用此類上的方法,但僅得到NoClassDefFoundError。我覺得奇怪的是,從日誌中我可以看到類的方法等已經成功調用了多次,但突然之間,一個相同的(以前成功的)方法調用目前會生成一個NoClassDefFoundError。此時,對該類的靜態方法的任何未來調用都將生成該錯誤(直到WebSpehere容器重新啓動或重新部署戰爭)。
讓我感到困惑的是,爲什麼這個類似乎在拋出NoClassDefFoundError之前工作了一段時間。 documentation對這個例外說:
當編譯當前正在執行的類時存在搜索到的類定義,但不能再找到定義。
所以我的問題是,一個類怎麼可用一段時間,清楚地響應對其靜態方法的調用,然後拋出NoClassDefFoundError?
我會看看到自定義的類裝載器/你正在使用你的Web應用程序代理。如果加載類的類加載器不再是加載器層次結構的一部分(例如,如果您使用自定義類加載器並且存在某種錯誤),那麼可能會發生這些錯誤。 – Matthias
@Matthias它只是一個普通的WebSphere 10.3.3,沒有爲其類加載器或類似的東西做定製。 –