从码头7升级到码头9

时间:2014-04-14 10:54:37

标签: java spring maven jetty

我正在运行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。 NB。将Jetty升级到版本7.6.14.v20131031时也会发生此错误。基本上任何其他版本,然后我现在使用的那个版本会导致此错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

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>

答案 1 :(得分:0)

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