我正在使用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异常。
正确的方法是什么?
由于
答案 0 :(得分:0)
这是Servlet 3.0的第一个alpha版本。这与最终版本相差甚远。特定的alpha版本确实没有包含所提到的方法。您可以使用ZIP工具提取有问题的JAR文件并检查源文件和类文件,从而轻松自行确认。
您需要javax.servlet:javax.servlet-api:3.0.1
来获得Servlet 3.0 API的最终版本。