1

我正在尝试在 WAS 6.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 的路径

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

我究竟做错了什么 ?

4

3 回答 3

2

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

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

于 2012-08-14T14:25:26.807 回答
1

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

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

于 2012-08-14T20:04:57.053 回答
0

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

于 2012-08-14T04:42:43.757 回答