【发布时间】:2025-11-26 05:40:01
【问题描述】:
我正在尝试基于从 IntelliJ 运行的 Spring Boot 获取基本的 Groovy 脚本 [1]。但是我遇到了使用 servlet 2 API 而不是 3 API 的问题。请参阅下面的堆栈跟踪 [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)
【问题讨论】:
-
我在 groovy 2.3.6 的命令行上遇到了同样的错误
-
cmd 行在我使用 Groovy 2.3.6 ($ spring run HelloWorld.groovy) 时工作正常
-
然后你应该添加你如何在 CLI 上运行它以及你如何在 IDEA 中运行它。根据您的问题,我假设:CLI 上的
groovy HelloWorld和课堂上的Shift+F10或main。后者相当于在 CLI 上使用 groovy 运行它(或多或少)。
标签: groovy intellij-idea spring-boot