Калитка и встроенный причал - classNotFoundException - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь запустить приложение (шов и) wicket на встроенном сервере Jetty.

Я получаю следующее исключение:

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 ]

2 голосов
/ 22 марта 2012

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

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

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

0 голосов
/ 28 февраля 2015

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

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

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

...