2012-03-22 2 views
0

Я пытаюсь запустить приложение (шов и) калитки на встроенном сервере причала.Wicket и embedded 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 в этот момент (jetty7, если вы хотите сервлет 2.5 и jetty8, если вы хотите поддержку сервлета 3.0)

2 - webapp выполняется в изолированном загрузчике классов, так что вы видите, что работая правильно, вам нужно установить приоритет загрузчика родительского класса на webapp contex t, который вы создаете, или используйте механизм сервера/системы для отображения только тех классов org.slf4j.

См. http://wiki.eclipse.org/Jetty/Reference/Jetty_Classloading для получения дополнительной информации о загрузке в причал.

+0

«установить родительский приоритет загрузчика класса в контексте webapp "-> это не работает, если только вы означает нечто иное, чем webAppContext.setParentLoaderPriority (true); – Fortega

+0

нужно увидеть какой-то код, а затем понять, что такое ваша установка, потому что это общее решение. –

+0

Я отредактировал вопрос, чтобы включить полный код. Проверьте выше ... – Fortega

0

Я нашел ответ от Martjin Dashorst вот хороший совет для отладки: https://stackoverflow.com/a/13413342/1915920

  1. удалить все *.jar s из WEB-INF/lib в какую-нибудь папку TMP
  2. рестарт через service jetty restart или аналогичный
  3. Посмотрите на журналы для проблем или какие c обнаружены недостатки
  4. добавить несколько банок назад (например, сгруппированы по типу, чтобы ускорить его ... связанным с orm/db, связанными с ui, различными областями функциональности и их зависимостями) с папкой WEB-INF/lib
  5. повторите с 2. по 4. до тех пор, пока вы, скорее всего, не столкнетесь с реальной конфликтной проблемой (или ни одной, если конфликтующие банки не нужны в вашей папке WEB-INF/lib на всех (больше)

применения некоторых загрузчик классов, связанных вещи в web.xml не помогло мне там: https://jira.codehaus.org/browse/JETTY-574

+0

решил это для меня без необходимости ничего настраивать, просто выполняя вышеуказанное –

Смежные вопросы