Калитка и встроенный причал - 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);
        }
    }
}

person Fortega    schedule 22.03.2012    source источник


Ответы (2)


1 - обновите причал 7 или причал 8, вы используете причал 6, судя по его виду, и он становится довольно серым за ушами ... на данный момент мы работаем над причалом-9 (причал7, если вы хотите сервлет 2.5 и причал8 если вам нужна поддержка сервлета 3.0)

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

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

person jesse mcconnell    schedule 22.03.2012
comment
установить приоритет загрузчика родительского класса в контексте веб-приложения - ›это не сработает, если вы не имеете в виду что-то другое, кроме webAppContext.setParentLoaderPriority (true); - person Fortega; 22.03.2012
comment
тогда нужно увидеть некоторый код и представление о вашей настройке, потому что это общее решение - person jesse mcconnell; 22.03.2012
comment
Теперь это работает. Установка приоритета загрузчика классов на причале 6 не дала никакого эффекта. Однако на причале 7 вроде работает. - person Fortega; 22.03.2012

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

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

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

person Andreas Covidiot    schedule 28.02.2015
comment
решил это для меня без необходимости что-либо настраивать, просто выполнив вышеуказанное - person Andreas Covidiot; 01.03.2015