我想在我的groovy 2.4应用程序中使用jetty 9(带有servlet api 3.1)。但groovy 2.4附带了捆绑的servlet-api-2.4.jar。这会导致错误,例如
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
我尝试通过葡萄抓取javax.servlet-api版本3.1.0,但无济于事。显然,groovy的servlet-api jar超越了葡萄。
我该怎么做?
在使用请求命中端点时抛出上述错误的完整代码:
@Grab(group="javax.servlet", module="javax.servlet-api", version="3.1.0", force=true)
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.ServletException
@Grab(group="org.eclipse.jetty", module="jetty-servlet", version="9.4.8.v20171121")
import org.eclipse.jetty.servlet.ServletContextHandler
@Grab(group="org.eclipse.jetty", module="jetty-server", version="9.4.8.v20171121")
import org.eclipse.jetty.server.Server
public class WebHookServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
def slurper = new groovy.json.JsonSlurper()
def msg = slurper.parse(req.inputStream)
// Do something with the message
resp.setStatus(HttpServletResponse.SC_NO_CONTENT)
}
}
Server server = new Server(8080)
ServletContextHandler context = new ServletContextHandler(server, "/ws", ServletContextHandler.SESSIONS)
context.addServlet(WebHookServlet.class, "/webhook")
server.start()
server.join()
答案 0 :(得分:0)
尝试添加...
@GrabExclude("javax.servlet:servlet-api")
这应该排除Servlet 2.x系列依赖项的默认(较旧)坐标/位置。
但Servlet 2.5还有许多其他位置。
尝试在命令行上列出您的依赖项,查找其他坐标位置<groupId>:<artifactId>
(没有版本)以查看问题可能来自何处。
答案 1 :(得分:0)
Groovy&gt; 2.5将servlet api升级到3.0.1 https://issues.apache.org/jira/browse/GROOVY-7899
不确定跳号9使用的3.0.1和3.1之间的区别,但经过几次简短测试后,似乎工作正常。