2009. 2. 26. 09:28

[질문][자답] java.lang.NoClassDefFoundError 컴파일은 정상적으로 되는데, 실행시 에러가 발생합니다.

//--------------------------------------------------------------------------------------------
[질문]

Java Build Path/ Libraries에 jeus.jar 파일 경로 잡았습니다.
 
Java Build Path/ Order and Export에 jeus.jar 파일을 최상위로 잡았습니다.
 
jeus.jar 파일을 Build 경로에서 삭제하면 컴파일 에러가 발생합니다.
 
Build Path에 정상적으로 경로를 설정하고, 컴파일도 정상적으로 됩니다.
 
그런데, 실행시키면 아래와 같은 에러가 발생합니다.
 
다른 PC에서 정상적으로 동작하는 WAR파일을 import해서 사용했는데
 
같은 에러가 발생합니다.
 
org.apache.commons.fileupload.DiskFileUpload 를 사용하여 파일 업로드하는 JAVA 파일입니다.
 
 
<<__Exception__>>
javax.servlet.ServletException: javax/servlet/ServletInputStream
 at jeus.servlet.jsp2.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:859)
 at jeus.servlet.jsp2.runtime.PageContextImpl.handlePageException(PageContextImpl.java:789)
 at jeus_jspwork._outside._500_writeOutSideCheckProc_5fjsp._jspService(_500_writeOutSideCheckProc_5fjsp.java:122)
 at jeus.servlet.jsp2.runtime.HttpJspBase.service(HttpJspBase.java:95)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at jeus.servlet.jsp.JspServletWrapper.executeServlet(JspServletWrapper.java:94)
 at jeus.servlet.servlets.JspServlet.execute(JspServlet.java:359)
 at jeus.servlet.engine.HttpRequestProcessor.run(HttpRequestProcessor.java:269)
Root Exception stack trace :
java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
 at com.kpic.is.FileManager.upload(FileManager.java:58)
 at jeus_jspwork._outside._500_writeOutSideCheckProc_5fjsp._jspService(_500_writeOutSideCheckProc_5fjsp.java:60)
 at jeus.servlet.jsp2.runtime.HttpJspBase.service(HttpJspBase.java:95)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at jeus.servlet.jsp.JspServletWrapper.executeServlet(JspServletWrapper.java:94)
 at jeus.servlet.servlets.JspServlet.execute(JspServlet.java:359)
 at jeus.servlet.engine.HttpRequestProcessor.run(HttpRequestProcessor.java:269)
<<__!Exception__>>


//-------------------------------------------------------------------------------
[자답]

NoClassDefFoundError는 말그대로 클래스가 존재하지 않아서 발생하는 에러입니다.

classpath에 해당 클래스가 존재하더라도  상위클래스로더에서 하위클래스로더를 참조하는경우 class의 name space가 달라서 해당 에러가 발생할수 있습니다.

servlet.jar는 JEUS에서 JEUS_HOME/lib/system/jeus.jar와 동일합니다.

혹시 cos.jar 가 servlet.jar 상위클래스로더에 있는건 아닌지 확인할 필요가 있습니다.

System ClassPath 또는 JAVA_HOME/jre/lib/ext/ 아래  cos.jar가 있는경우 해당 에러가 발생할수 있습니다.