有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在WAS上部署应用程序时发生java NoClassDefFoundError

我正在尝试在WAS6.1服务器上部署应用程序

但是,我得到以下错误:

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

其中,在“自定义属性”中,MY_JARS键包含值作为log4j jar的路径

我做了无数次服务器清理和重启、重新发布、重新部署应用程序。但这一错误不会发生

我做错了什么


共 (3) 个答案

  1. # 1 楼答案

    要以这种方式使用${MY_JARS},您需要在Environment>WebSphere Variables,而不是在{}中

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

  2. # 2 楼答案

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

    在WAS中,您可以检查加载了哪些库。IIRC您必须单击应用程序,然后单击Web模块,然后才能检查类加载器。如果打开类加载器,您将看到加载了哪些库

  3. # 3 楼答案

    请确保log4j。jar位于应用程序的类路径上。例如在WEB-INF\lib下