在WAS上部署应用程序时出现NoClassDefFoundError

时间:2012-08-14 04:38:55

标签: java web-applications websphere

我正在尝试在WAS 6.1 Server上部署应用程序。

但是,我收到以下错误:

java.lang.NoClassDefFoundError: org.apache.log4j.Logger
at myPackage.myClass.<clinit>(myClass.java:40)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:194)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1328)
at com.ibm.ejs.container.EJSContainer.loadBeanMetaData(EJSContainer.java:1756)
at com.ibm.ejs.container.HomeOfHomes.loadBeanMetaData(HomeOfHomes.java:1073)
at com.ibm.ejs.container.HomeRecord.getHomeAndInitialize(HomeRecord.java:454)
at com.ibm.ejs.container.EJSContainer.getHomeWrapperCommon(EJSContainer.java:1322)
at com.ibm.ejs.container.EJSContainer.getHomeInstance(EJSContainer.java:1231)
at com.ibm.ejs.container.EJSContainer.startBean(EJSContainer.java:1217)
at com.ibm.ws.runtime.component.EJBContainerImpl.startBean(EJBContainerImpl.java:3385)
at com.ibm.ws.runtime.component.EJBContainerImpl.startModule(EJBContainerImpl.java:2589)
at com.ibm.ws.runtime.component.EJBContainerImpl.start(EJBContainerImpl.java:3719)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1304)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1165)
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:587)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:832)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:950)
at com.ibm.ws.runtime.component.ApplicationMgrImpl$AppInitializer.run(ApplicationMgrImpl.java:2131)
at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:342)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at com.ibm.ws.classloader.CompoundClassLoader.findClass(CompoundClassLoader.java:579)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:414)
at java.lang.ClassLoader.loadClass(ClassLoader.java:597)
... 22 more

Admin Console -> Servers -> Application Servers -> myServerName -> Java and Process Management -> Process Definition -> Java Virtual Machine -> ClassPath

我有一个条目如下:

${MY_JARS}\log4j-1.2.15.jar

自定义属性中的位置&#39; MY_JARS键包含值作为log4j jar的路径

我做了服务器清理并重新启动,重新发布,重新部署应用程序无数次。但是这个错误不会发生。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

要以这种方式使用${MY_JARS},您需要在Environment&gt;中定义它WebSphere Variables,而不是Custom Properties

但是我要提醒你注意以这种方式添加log4j。我似乎记得如果在多个应用程序之间共享一个jar,log4j可能无法正常工作。我想我们尝试使用log4j作为共享库(可能是你尝试做的事情,BTW的推荐方式),但最终需要部署到每个应用程序的WEB-INF / lib。

答案 1 :(得分:1)

正如dbreaux已经指出的那样,你必须使用正确的范围创建环境变量。自定义属性在运行时可用,但不适用于服务器配置级别。

在WAS中,您可以检查加载的库。 IIRC你必须点击应用程序,之后在Web模块上,你应该能够检查类加载器。如果打开类加载器,您将看到加载了哪些库。

答案 2 :(得分:0)

请确保log4j.jar位于应用程序的CLASSPATH上。例如;在WEB-INF \ lib下