2011-01-23 17 views
4

Jiraの新しいリスナーを作成しようとしています。私は実際にいくつかの助けと指導をいただければ幸いです。ClassloaderがTomcat 6の読み込みライブラリを発行します

背景 Apache TomcatでJira 4.2.2 Enterprise WARを実行しています。これは、Webアプリケーション/ JIRA/WEB-INF/libの下に、次のjarファイルが含まれています

* 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

上の任意のアドバイス:

とすぐに私たちは、このクラスに次のコードを追加するとエラーケース

は、我々は、添付の例外を受け取りますこれを解決するか、私がここで間違っていることへの指針は、大いに感謝するでしょうd!例外の

充実ビューは...

 
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 

答えて

1
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 

を次のそれはあなたのクラス3rdPartyClassDefaultImplLoggerFactoryを見つけることができないことを意味します。このサードパーティライブラリはCATALINA_HOME \ libの下にありますか? 「共通クラスローダー」(classloaders in tomcat)でロードされ、必要なすべてのクラス(3rdPartyClassDefaultImpl, LoggerFactory)がそのクラスの親クラスのリポジトリ内で検索され、見つからないことを意味します。

考えられる解決策の1つは、第三者を配置することです。私はクラスパスにSLF4Jを追加する場合は、サードパーティのライブラリをクラスパスに、$ {CATALINA_HOME} /bin/setenv.sh の下で定義されてweb-inf/lib下またはCATALINA_HOME\LIB

+0

にSLF4Jとlog4jwrapperを移動する瓶、その後、他のアプリケーションのものなし長い仕事。 – Anonymouslemming

+0

'CATALINA_HOME \ lib'と同じクラスの問題です。あなたがslf4jを動かすことができないなら、サードパーティのlibを 'web-inf \ lib'に移動してみてください –

関連する問題