簡體   English   中英

嵌入式Jetty服務器不適用於Java Vaadin應用程序

[英]Embedded Jetty Server not working for Java Vaadin app

我正在使用maven構建一個vaadin app,它將使用嵌入式jetty服務器運行。 我在網上找到了幾個例子,並盡我所能將我從中學到的東西整合到我的代碼中,但它沒有用。

我做了一個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.ServletContextHandler@35bbe5e8{/example,null,AVAILABLE}
Nov 18, 2015 1:31:58 PM org.eclipse.jetty.server.AbstractConnector doStart
INFO: Started ServerConnector@880ec60{HTTP/1.1}{0.0.0.0:8080}
Nov 18, 2015 1:31:58 PM org.eclipse.jetty.util.component.AbstractLifeCycle setFailed
WARNING: FAILED org.eclipse.jetty.server.Server@3f3afe78: 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非常新,所以任何幫助都將非常感謝!

不要在項目中添加任意jar,這將無法工作。

使用構建工具,(實際上,不能強調這一點!)你有很多可供選擇。

  • Maven的
  • 搖籃
  • Ant +常春藤
  • 斯卡拉/ SBT
  • Buildr
  • 等......

發生的事情是你的類路徑中有多個版本的jetty。

我在你的啟動日志中看到9.2.2.v20140723 (版本是從不同的地方發現的)和對org.eclipse.jetty.util.Uptime引用, 直到9.2.6.v20141203引入

Uptime類是一個內部類,用於修復與java8 compact3和android兼容性相關的錯誤

但是,您還有一個試圖使用此類的Server對象,這意味着您在9.2.6.v20141203之后的版本中有一個版本的jetty-server.jar ,但在它之前的版本中有一個jetty-util.jar

你需要做什么:

  1. 使用構建工具!
  2. 從構建/運行時中消除黑暗中的任意工件引用。
  3. 在您的EmbeddedJetty.java示例中,您只需要對jetty-servlet-${version}.jar的引用jetty-servlet-${version}.jar (就是它。不要引用任何其他內容,請參閱步驟#4)
  4. 讓工件依賴知識做自己的事情,構建工具將自動,靈活地提取您需要的其他工件。
  5. 如果您正在使用jetty-all.jar工件,請在項目中退出(這不是該工件的存在)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM