简体   繁体   English

嵌入式Jetty服务器不适用于Java Vaadin应用程序

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

I am building a vaadin app with maven that will use an embedded jetty server to run. 我正在使用maven构建一个vaadin app,它将使用嵌入式jetty服务器运行。 I have found a couple examples online and have done my best to integrate what I learned from them into my code, but it is not working. 我在网上找到了几个例子,并尽我所能将我从中学到的东西整合到我的代码中,但它没有用。

I have made an EmbeddedJetty class: 我做了一个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();
    }
}

And this is my DashboardServlet class: 这是我的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());
    }
}

When I try to run the EmbeddedJetty class, I get back this stack trace: 当我尝试运行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

And here is the new stack trace I am getting after importing the jetty-util jar : 这是导入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

I am extremely new to Jetty and Vaadin so any help would be much appreciated! 我对Jetty和Vaadin非常新,所以任何帮助都将非常感谢!

Don't add arbitrary jars to your project, that will never work. 不要在项目中添加任意jar,这将无法工作。

Use a build tool, (really, can't emphasis this enough!) You have many to choose from. 使用构建工具,(实际上,不能强调这一点!)你有很多可供选择。

  • Maven Maven的
  • Gradle 摇篮
  • Ant + Ivy Ant +常春藤
  • Scala/SBT 斯卡拉/ SBT
  • Buildr Buildr
  • etc ... 等......

What's going on is that you have multiple versions of jetty present in your classpath. 发生的事情是你的类路径中有多个版本的jetty。

I see 9.2.2.v20140723 in your startup logs (version is discovered from different places) and references to org.eclipse.jetty.util.Uptime which wasn't introduced until 9.2.6.v20141203 . 我在你的启动日志中看到9.2.2.v20140723 (版本是从不同的地方发现的)和对org.eclipse.jetty.util.Uptime引用, 直到9.2.6.v20141203引入

The Uptime class is an in internal class, for a bug fix related to java8 compact3 and android compatibility . Uptime类是一个内部类,用于修复与java8 compact3和android兼容性相关的错误

However you also have a Server object that is attempting to use this class, which means you have a version of jetty-server.jar at a version after 9.2.6.v20141203 , but a jetty-util.jar at a version before it. 但是,您还有一个试图使用此类的Server对象,这意味着您在9.2.6.v20141203之后的版本中有一个版本的jetty-server.jar ,但在它之前的版本中有一个jetty-util.jar

What you need to do: 你需要做什么:

  1. Use a build tool! 使用构建工具!
  2. Eliminate shot-in-the-dark arbitrary artifact references from your build/runtime. 从构建/运行时中消除黑暗中的任意工件引用。
  3. From your EmbeddedJetty.java example, you only need a reference to the jetty-servlet-${version}.jar (that's it. don't reference anything else, see step #4) 在您的EmbeddedJetty.java示例中,您只需要对jetty-servlet-${version}.jar的引用jetty-servlet-${version}.jar (就是它。不要引用任何其他内容,请参阅步骤#4)
  4. let the artifact dependency knowledge do its thing, the build tool will pull in the rest of the artifacts that you need, automatically, and sanely. 让工件依赖知识做自己的事情,构建工具将自动,灵活地提取您需要的其他工件。
  5. If you are using the jetty-all.jar artifact, quit using it in your project (that's not what that artifact exists for) . 如果您正在使用jetty-all.jar工件,请在项目中退出(这不是该工件的存在)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM