Java 类加载器在Tomcat6中加载库
我正试图为吉拉写一个新的倾听者,我遇到了一个问题,我非常感谢你的帮助和指导 背景 我们正在ApacheTomcat下运行Jira 4.2.2 Enterprise WAR。这包括webapps/jira/WEB-INF/lib下的以下jar文件:Java 类加载器在Tomcat6中加载库,java,tomcat,classloader,jira,Java,Tomcat,Classloader,Jira,我正试图为吉拉写一个新的倾听者,我遇到了一个问题,我非常感谢你的帮助和指导 背景 我们正在ApacheTomcat下运行Jira 4.2.2 Enterprise WAR。这包括webapps/jira/WEB-INF/lib下的以下jar文件: * slf4j-api-1.5.8.jar * slf4j-log4j12-1.5.8.jar 我们有一个作为插件运行的简单类。它接收事件并根据事件的类型执行一些工作。此类使用slf4j进行日志记录,并按预期工作。该类被打包到一个jar中,部署在we
* slf4j-api-1.5.8.jar
* slf4j-log4j12-1.5.8.jar
我们有一个作为插件运行的简单类。它接收事件并根据事件的类型执行一些工作。此类使用slf4j进行日志记录,并按预期工作。该类被打包到一个jar中,部署在webapps/jira/WEB-INF/lib下,并从那里使用。我们可以将其添加为侦听器,对其进行配置,并在日志中查看init消息。所有日志记录都是通过slf4j进行的,并且可以正常工作
当我们尝试从第三方库向插件添加功能时,我们会收到以下异常:
com.atlassian.util.concurrent.LazyReference$InitializationException:java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory
由于slf4j可供我们称之为第三方库的类使用,我不明白我做错了什么,也不知道在调用时如何使其可用
工作案例
在我们的代码中,我们创建了一个记录器,如下所示:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.3rdparty.login;
public class JiraSampleListener extends AbstractIssueEventListener implements IssueEventListener {
private final static Logger logger = LoggerFactory.getLogger(JiraSampleListener.class);
.
.
.
然后我们可以通过调用
logger.warn("MESSAGE")
预期消息将出现在我们的日志中
错误案例
一旦我们将以下代码添加到此类,我们将收到附加的异常:
newThing = new 3rdPartyClass("name of thing");
例外情况
com.atlassian.util.concurrent.LazyReference$InitializationException:
java.lang.NoClassDefFoundError:
org/slf4j/LoggerFactory
任何关于解决这一问题的建议或我在这里做错了什么的指点都将不胜感激
下面是对例外情况的更全面的看法
2011-01-19 05:30:51,016 main ERROR [com.atlassian.jira.ComponentManager] Error occurred
while starting component 'com.atlassian.jira.event.DefaultListenerManager'.
com.atlassian.util.concurrent.LazyReference$InitializationException: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:148)
at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:111)
at com.atlassian.util.concurrent.ResettableLazyReference.get(ResettableLazyReference.java:89)
at com.atlassian.jira.event.DefaultListenerManager$Listeners.start(DefaultListenerManager.java:93)
at com.atlassian.jira.event.DefaultListenerManager.start(DefaultListenerManager.java:38)
at com.atlassian.jira.ComponentManager.quickStart(ComponentManager.java:256)
at com.atlassian.jira.ComponentManager.start(ComponentManager.java:212)
at com.atlassian.jira.upgrade.ConsistencyLauncher.launchConsistencyChecker(ConsistencyLauncher.java:63)
at com.atlassian.jira.upgrade.ConsistencyLauncher.contextInitialized(ConsistencyLauncher.java:42)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at 3rd.party.3rdPartyClassDefaultImpl.(3rdPartyClassDefaultImpl.java:101)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at 3rd.party.3rdParty.(3rdParty.java:107)
at 3rd.party.3rdParty.(3rdParty.java:83)
at 3rd.party.3rdParty.(3rdParty.java:67)
at my.organisationlisteners.JiraSampleListener.init(JiraSampleListener.java:36)
at com.atlassian.jira.event.ListenerFactory.getListener(ListenerFactory.java:33)
at com.atlassian.jira.event.DefaultListenerManager$Listeners.loadListeners(DefaultListenerManager.java:126)
at com.atlassian.jira.event.DefaultListenerManager$Listeners.create(DefaultListenerManager.java:71)
at com.atlassian.jira.event.DefaultListenerManager$Listeners.create(DefaultListenerManager.java:66)
at com.atlassian.util.concurrent.ResettableLazyReference$InternalReference.create(ResettableLazyReference.java:143)
at com.atlassian.util.concurrent.LazyReference$Sync.run(LazyReference.java:316)
at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:142)
... 32 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 46 more
2011-01-19 05:30:51016发生主错误[com.atlassian.jira.ComponentManager]错误
启动组件“com.atlassian.jira.event.DefaultListenerManager”时。
com.atlassian.util.concurrent.LazyReference$InitializationException:java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory
位于com.atlassian.util.concurrent.LazyReference.getInterruptbly(LazyReference.java:148)
位于com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:111)
位于com.atlassian.util.concurrent.ResettableLazyReference.get(ResettableLazyReference.java:89)
位于com.atlassian.jira.event.DefaultListenerManager$Listeners.start(DefaultListenerManager.java:93)
位于com.atlassian.jira.event.DefaultListenerManager.start(DefaultListenerManager.java:38)
位于com.atlassian.jira.ComponentManager.quickStart(ComponentManager.java:256)
位于com.atlassian.jira.ComponentManager.start(ComponentManager.java:212)
在com.atlassian.jira.upgrade.ConsistencyLancher.launchConsistencyChecker(ConsistencyLancher.java:63)
位于com.atlassian.jira.upgrade.ConsistenceLancher.contextInitialized(ConsistenceLancher.java:42)
位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
位于org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
位于org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
位于org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
位于org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
位于org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
位于org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
在org.apache.catalina.util.LifecycleSupport.FireLifecycleSupport(LifecycleSupport.java:119)上
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
位于org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
位于org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
位于org.apache.catalina.core.StandardService.start(StandardService.java:519)
位于org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
位于org.apache.catalina.startup.catalina.start(catalina.java:581)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
原因:java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory
位于3rd.party.3rdPartyClassDefaultImpl。(3rdPartyClassDefaultImpl.java:101)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:169)
第三方(3rdParty.java:107)
第三方(3rdParty.java:83)
第三方(3rdParty.java:67)
在my.organizationListeners.JiraSampleListener.init(JiraSampleListener.java:36)
位于com.atlassian.jira.event.ListenerFactory.getListener(ListenerFactory.java:33)
位于com.atlassian.jira.event.DefaultListenerManager$Listeners.loadListeners(DefaultListenerManager.java:126)
位于com.atlassian.jira.event.DefaultListenerManager$Listeners.create(DefaultListenerManager.java:71)
位于com.atlassian.jira.event.DefaultListenerManager$Listeners.create(DefaultListenerManager.java:66)
位于com.atlassian.util.concurrent.ResettableLazyReference$InternalReference.create(ResettableLazyReference.java
Caused by: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at
3rd.party.3rdPartyClassDefaultImpl.(3rdPartyClassDefaultImpl.java:101) at
java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at
3rd.party.3rdParty.(3rdParty.java:107) at 3rd.party.3rdParty.(3rdParty.java:83) at
3rd.party.3rdParty.(3rdParty.java:67) at