如何在带有jetty runner的gradle项目中包含servlet jar?

时间:2015-07-06 17:05:09

标签: servlets gradle jetty

我正在使用android studio 1.3。我从这里安装了jetty runner插件:

https://github.com/guikeller/jetty-runner

我需要扩展HttpServlet,所以我在build.gradle中包含以下依赖项:

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'jetty'

dependencies {
    ...
    compile 'javax.servlet:servlet-api:3.0-alpha-1'
}

在jetty启动时为该方法导致NoSuchMethod异常:

ServletContext.getServletRegistration

一些堆栈跟踪:

INFO::main: Logging initialized @131ms
INFO:oejr.Runner:main: Runner
INFO:oejs.Server:main: jetty-9.2.5.v20141112
WARN:oeja.AnnotationConfiguration:main: ServletContainerInitializers: detected. 
    Class hierarchy: empty
WARN:oejuc.AbstractLifeCycle:main: FAILED
    org.eclipse.jetty.annotations.ServletContainerInitializersStarter:
java.lang.NoSuchMethodError:
javax.servlet.ServletContext.getServletRegistration(Ljava/lang/String;)Ljavax/servlet/ServletRegistration;
...

如果我不包含servlet jar依赖项,那么运行器可以正常运行(但是我无法编译项目,因为我需要扩展HttpServlet ......)。

我认为将servlet jar添加为'编译'可能不正确。依赖,但更像是这样:

providedCompile 'javax.servlet:servlet-api:3.0-alpha-1'

但仍然会抛出相同的NoSuchMethod异常。

正确的方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

  

javax.servlet:servlet-api:3.0-alpha-1

这是Servlet 3.0的第一个alpha版本。这与最终版本相差甚远。特定的alpha版本确实没有包含所提到的方法。您可以使用ZIP工具提取有问题的JAR文件并检查源文件和类文件,从而轻松自行确认。

您需要javax.servlet:javax.servlet-api:3.0.1来获得Servlet 3.0 API的最终版本。