簡體   English   中英

部署后為什么會出現noclassdeffounderror?

[英]why am i getting the noclassdeffounderror after deploying?

在將jar更改部署到某個類文件后,我收到noclassdeffounderror。 通過7zip提取jar文件時,我能夠在jar中看到類文件。

我還對.class文件進行了反編譯,以查找任何錯誤,但未得到任何結果。

部署時,我只是將.class文件從eclipse工作區拖到了預先存在的jar文件中。 這有關系嗎?

因為我在Eclipse的jre 1.7上運行但我的部署環境是jre 1.6,因此在其中編譯jar文件的jdk版本是否有意義?

我心中的問題是,添加到jar中的類是在不同版本的Java下編譯的。 我猜您編譯為1.7,而12c運行1.7,而11g運行1.6。 要么在1.6中編譯該類,然后將其添加到jar中,要么在1.7中重新編譯該jar,並確保您所運行的環境具有1.7或更高版本。

NoClassDefFoundError指出該類在運行時不可用。 確保將它放在類路徑中,或者靜態初始化程序(如果存在)沒有損壞。 對於以后的版本,您將在堆棧跟蹤下面的某個位置看到ExceptionInInitializerError。

不太確定jdk版本是否重要。

在將jar更改部署到某個類文件后,我收到noclassdeffounderror。

這是由代碼所依賴的類文件引起的,並且該類文件在編譯時存在,但在運行時未找到( 請參見此答案 )。

部署時,我只是將.class文件從eclipse工作區拖到了預先存在的jar文件中。 這有關系嗎?

是的,這很重要。 確保將類文件放回正確的包文件夾中。 例如,包com.foo的類必須位於jar文件內的com/foo文件夾中。 當您將更改后的版本拖到jar文件中時,它有可能落在其他地方。

因為我在Eclipse的jre 1.7上運行但我的部署環境是jre 1.6,因此在其中編譯jar文件的jdk版本是否有意義?

jar文件本身只是一個zip文件,所以不,您使用哪個Java版本壓縮jar文件的內容都沒有關系。

但是,如果您從現有的jar文件中重新編譯了一個類,那么使用哪個版本的Java來編譯jar文件中的其他類就沒有關系,因為您可能會導致該類與其配套類不兼容。

當我在jdk 1.6中編譯代碼時,這非常有效。 兩個版本中的java.security.SecureClassLoader均已更改。 那就是為什么我想我得到了錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM