[英]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: 你需要做什么:
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) 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.