2015-11-18 1 views
0

Я создаю приложение vaadin с maven, которое будет использовать встроенный сервер причала для запуска. Я нашел пару примеров в Интернете и сделал все возможное, чтобы интегрировать то, что я узнал от них, в свой код, но он не работает.Embedded Jetty Server не работает для Java Vaadin app

Я сделал EmbeddedJetty класс:

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import com.wndgroup.auction.supportsystem.DashboardServlet; 

public class EmbeddedJetty { 
    public static void main(String[] args) throws Exception { 
     Server server = new Server(8080); 
     ServletContextHandler handler = new ServletContextHandler(server, "/example"); 
     handler.addServlet(DashboardServlet.class, "/"); 
     server.start(); 
    } 
} 

И это мой DashboardServlet класс:

import javax.servlet.ServletException; 
import com.vaadin.server.VaadinServlet; 

@SuppressWarnings("serial") 
public class DashboardServlet extends VaadinServlet { 

    @Override 
    protected final void servletInitialized() throws ServletException { 
     super.servletInitialized(); 
     getService().addSessionInitListener(new DashboardSessionInitListener()); 
    } 
} 

Когда я пытаюсь запустить EmbeddedJetty класс, я получаю обратно эту трассировку стека:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/util/component/ContainerLifeCycle 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at com.wndgroup.auction.supportsystem.EmbeddedJetty.main(EmbeddedJetty.java:10) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.component.ContainerLifeCycle 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 49 more 

И вот новый след следа, который я получаю тер импортируемое jetty-util jar:

Nov 18, 2015 1:31:58 PM org.eclipse.jetty.util.log.Log initialized 
INFO: Logging initialized @225ms 
Nov 18, 2015 1:31:58 PM org.eclipse.jetty.server.Server doStart 
INFO: jetty-9.2.2.v20140723 
Nov 18, 2015 1:31:58 PM org.eclipse.jetty.server.handler.ContextHandler doStart 
INFO: Started o.e.j.s.Servle[email protected]{/example,null,AVAILABLE} 
Nov 18, 2015 1:31:58 PM org.eclipse.jetty.server.AbstractConnector doStart 
INFO: Started [email protected]{HTTP/1.1}{0.0.0.0:8080} 
Nov 18, 2015 1:31:58 PM org.eclipse.jetty.util.component.AbstractLifeCycle setFailed 
WARNING: FAILED [email protected]: java.lang.NoClassDefFoundError: org/eclipse/jetty/util/Uptime 
java.lang.NoClassDefFoundError: org/eclipse/jetty/util/Uptime 
    at org.eclipse.jetty.server.Server.doStart(Server.java:379) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
    at com.wndgroup.auction.supportsystem.EmbeddedJetty.main(EmbeddedJetty.java:13) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.Uptime 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 3 more 

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/util/Uptime 
    at org.eclipse.jetty.server.Server.doStart(Server.java:379) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
    at com.wndgroup.auction.supportsystem.EmbeddedJetty.main(EmbeddedJetty.java:13) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.Uptime 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 3 more 

Я очень новой для Jetty и Vaadin поэтому любая помощь была бы оценена!

+0

Как всегда для ClassNotFound ... попробуйте добавить отсутствующие библиотеки (имя_файла + jarfile в google должно давать результаты) – Jan

+0

Вы импортировали банку Jetty-util. Загрузчик классов не может найти файл ContainerLifeCycle.class. Пожалуйста, проверьте. – Priyanshu

+0

Я обнаружил, что я не импортировал и сделал это. Кажется, я решил свою первоначальную проблему, но теперь у меня возникают проблемы с jetty.util.Uptime. Любая идея, почему это происходит?(Я загрузил трассировку стека на вопрос) @Priyanshu –

ответ

2

Не добавляйте в проект никаких банок, которые никогда не будут работать.

Use a build tool, (really, can't emphasis this enough!) You have many to choose from.

  • Maven
  • Gradle
  • Ant + Ivy
  • Scala/SBT
  • Buildr
  • etc ...

Что происходит, так это то, что у вас есть несколько версий причала, присутствующих в вашем пути к классу.

Я вижу 9.2.2.v20140723 в ваших журналах запуска (версия обнаружена из разных мест) и ссылки на org.eclipse.jetty.util.Uptime, который не был introduced until 9.2.6.v20141203.

Класс Uptime является внутренним классом, для a bug fix related to java8 compact3 and android compatibility.

Однако у вас также есть Server объекта, который пытается использовать этот класс, а это значит, у вас есть версия jetty-server.jar в версии после 9.2.6.v20141203, но jetty-util.jar на версию перед ним.

Что вам нужно сделать:

  1. Используйте инструмент сборки!
  2. Устранение произвольных артефактов произвольных артефактов из вашей сборки/времени выполнения.
  3. Вашего EmbeddedJetty.java Например, вам нужна всего лишь ссылка на jetty-servlet-${version}.jar (это все. Ничего не ссылаться на другое, см шаг # 4)
  4. пусть знание артефакта зависимости делать свое дело, инструмент сборки будет тянуть остальные артефакты, которые вам нужны, автоматически и безопасны.
  5. Если вы используете артефакт jetty-all.jar, прекратите использовать его в своем проекте (that's not what that artifact exists for).
+0

Так что для версий одинаково исправлена ​​проблема, с которой я столкнулся, и теперь запускается сервер Jetty. но я сталкиваюсь с этой ошибкой при попытке перейти к правильному URL-адресу: HTTP ERROR: 500 Проблема с доступом/пример /. Причина: javax.servlet.ServletException: com.vaadin.server.ServiceException: java.lang.IllegalStateException: нет SessionManager –

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