【问题标题】:Upgrading from jetty 7 to jetty 9从 7 号码头升级到 9 号码头
【发布时间】:2014-04-14 10:54:37
【问题描述】:

我正在运行一个 Jetty 7 Web 应用程序并想升级到 jetty 9。该项目基于 Spring 框架并使用 Maven 进行依赖管理。升级 Jetty 后,由于以下错误无法启动:

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jetty.start.Main.invokeMain(Main.java:473)
at org.eclipse.jetty.start.Main.start(Main.java:615)
at org.eclipse.jetty.start.Main.main(Main.java:96)
Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2493)
at java.lang.Class.getConstructor0(Class.java:2803)
at java.lang.Class.newInstance(Class.java:345)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:348)
at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:296)
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1262)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1197)
... 7 more
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 16 more

我尝试使用 maven 依赖树工具识别可能导致与 servlet-api 冲突的依赖项,但这并没有太大帮助。错误仍然存​​在。

当前运行 Jetty 版本 7.2.2.v20101205,并希望升级到 9.1.3.v20140225。注意。将 Jetty 升级到版本 7.6.14.v20131031 时也会出现此错误。基本上,除我现在使用的版本之外的任何其他版本都会导致此错误。

有什么想法吗?

【问题讨论】:

    标签: java spring maven jetty


    【解决方案1】:

    Jetty 9 基于 Servlet 容器 3.0 版本。我猜你的 maven 依赖引用了 2.5 或更早版本的 API

    3.0 之前:

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    

    3.0.1 及以上:

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
    </dependency>
    

    【讨论】:

    • 谢谢,我尝试了 3.0.1 的依赖,但错误依旧。最奇怪的是,如果我尝试升级到版本 7.6.14.v20131031,我已经收到错误消息。因此,即使我只将 Jetty 版本从 7.2.x 更改为 7.6.x,它也已经开始向我抛出错误。所有 7.x Jetty 版本都使用 2.5 servlet-api,对吗?
    【解决方案2】:

    我会开始检查 webapp war 中是否有任何与 servlet-api 相关的库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2014-02-25
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多