我正在尝试基于从IntelliJ运行的Spring Boot获得基本的Groovy脚本[1]。但是我遇到了使用servlet 2 API而不是3的问题。请参阅下面的堆栈跟踪[2]。
如果我使用Spring Boot CLI从命令行运行相同的脚本,它运行正常。 那么我需要改变什么?
非常感谢任何帮助,
斯蒂芬
PS groovy脚本可能会被简化,因为它只是来自java的复制/粘贴
[1]
@Grab(group='org.springframework.boot', module='spring-boot-starter-web', version='1.1.7.RELEASE')
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@Controller
@EnableAutoConfiguration
public class HelloWorld {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(HelloWorld.class, args);
}
}
[2]
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:816)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 6 common frames omitted
Caused by: **java.lang.NoSuchMethodError**: javax.servlet.ServletContext.addServlet(Ljava/lang/String;Ljavax/servlet/Servlet;)Ljavax/servlet/ServletRegistration$Dynamic;
at org.springframework.boot.context.embedded.ServletRegistrationBean.onStartup(ServletRegistrationBean.java:166)
答案 0 :(得分:0)
检查IDE使用的Groovy发行版。我认为默认的发行版中仍然有servlet jar,默认情况下它们会在类路径上(可能有一种方法可以禁用它,但它取决于工具)。您需要删除它们,或者复制Groovy发行版并删除坏的jar,然后将IDE指向它。
答案 1 :(得分:0)
我已修复'这是通过在groovy jar之前将javax.servlet-api-3.1.0.jar添加到类路径。即在模块设置的“依赖关系”选项卡中将高于 groovy 2.3.6库。
现在我手动下载了servlet jar,也许我可以用葡萄来改善它。