2012-03-22 8 views
0

埋め込みJettyサーバーで(seamとwicket)アプリケーションを実行しようとしています。Wicketと組み込みjetty - classNotFoundException

私は次の例外を取得:

Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:366) 
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337) 
    ... 28 more 

しかし、LoggerFactoryクラスは、私のクラスパス上にあります。次のように私はこれをテストした:

public class StartJetty { 
    public static void main(String[] args) throws Exception { 
     ILoggerFactory fac = LoggerFactory.getILoggerFactory(); //this works! 

     Server server = new Server(); 
     ... 

コンプリートクラス:

public class StartJetty { 
    public static void main(String[] args) throws Exception { 
     Logger log = LoggerFactory.getLogger(StartJetty.class); 

     Server server = new Server(); 
     SocketConnector connector = new SocketConnector(); 
     connector.setMaxIdleTime(1000 * 60 * 60); 
     connector.setSoLingerTime(-1); 
     connector.setPort(8090); 
     server.setConnectors(new Connector[] { connector }); 
     WebAppContext bb = new WebAppContext(); 
     bb.setParentLoaderPriority(true); 
     bb.setServer(server); 
     bb.setContextPath("/wicket"); 
     bb.setWar("C:/wicket/exploded-archives/wicket.war"); 
     server.setHandler(bb); 
     try { 
      server.start(); 
      while (System.in.available() == 0) { 
       Thread.sleep(1000); 
      } 
      server.stop(); 
      server.join(); 
     } catch (Throwable e) { 
      e.printStackTrace(); 

      System.exit(100); 
     } 
    } 
} 

答えて

2

1 - 桟橋7や桟橋8へのアップデート、あなたがそれのルックスで桟橋6を使用して、それが背後にある非常にグレーになっているが耳...私たちはこの時点でjetty-9に取り組んでいます(サーブレット2.5が必要な場合はjetty7、サーブレット3.0のサポートが必要な場合はjetty8)

2 - webappは独立したクラスローダーで実行されるので、正しく動作するには、webapp contexで親クラスローダーの優先順位を設定する必要がありますサーバー/システム・メカニズムを使用して、org.slf4jクラスのみを公開してください。

jettyのクラスローディングの詳細については、http://wiki.eclipse.org/Jetty/Reference/Jetty_Classloadingを参照してください。

+0

「親を設定しますウェブアプリケーションコンテキストでのクラスローダー優先度 " - >これは動作しません。 webAppContext.setParentLoaderPriority(true)以外の何かを意味します。 – Fortega

+0

これは一般的な解決策であるため、いくつかのコードとセットアップのアイデアを参照する必要があります –

+0

完全なコードを含めるように質問を編集しました。上にチェック... – Fortega

0

私はここにMartjin Dashorstからの答えは、デバッグのために良いアドバイスですが見つかりました:https://stackoverflow.com/a/13413342/1915920

  1. service jetty restartまたは類似を経由して、いくつかのtmpフォルダにWEB-INF/libから
  2. 再起動をすべて*.jar秒を削除
  3. 問題のログを参照してください。またはc雌犬が見つからないことが判明しました
  4. いくつかの瓶を戻します。 ... orm/db関連、異なる機能性スコープおよびそれらの依存関係)をWEB-INF/libフォルダ
  5. に繰り返します。本当に相反する問題が見つかるまでweb.xmlにいくつかのクラスローダに関連するものを適用する (またはnone競合瓶はもう(すべてであなたのWEB-INF/libフォルダに必要されていない場合)

が私を助けていない:https://jira.codehaus.org/browse/JETTY-574

+0

は、上記のことを行うだけでどこでも調整する必要なく私のために解決しました –

関連する問題