使用Groovy和IntelliJ的Hello World和Spring Boot

使用Groovy和IntelliJ的Hello World和Spring Boot,groovy,intellij-idea,spring-boot,Groovy,Intellij Idea,Spring Boot,我试图从IntelliJ获得一个基于Spring Boot的基本Groovy脚本[1]。但是,我遇到了使用servlet 2 API而不是servlet 3的问题。请参阅下面的堆栈跟踪[2] 如果我使用springbootcli从命令行运行相同的脚本,它运行得很好。 那么我需要改变什么呢 非常感谢您的帮助 斯蒂芬 PS groovy脚本可能会简化,因为它只是java的复制/粘贴 [1] [2] 检查IDE正在使用的Groovy发行版。我认为默认发行版中仍然有ServletJAR,默认情况下它们将

我试图从IntelliJ获得一个基于Spring Boot的基本Groovy脚本[1]。但是,我遇到了使用servlet 2 API而不是servlet 3的问题。请参阅下面的堆栈跟踪[2]

如果我使用springbootcli从命令行运行相同的脚本,它运行得很好。 那么我需要改变什么呢

非常感谢您的帮助

斯蒂芬

PS groovy脚本可能会简化,因为它只是java的复制/粘贴

[1]

[2]


检查IDE正在使用的Groovy发行版。我认为默认发行版中仍然有ServletJAR,默认情况下它们将位于类路径上可能有一种方法来禁用它,但这取决于工具。您需要删除它们,或者复制Groovy发行版并删除坏jar,然后将IDE指向坏jar。

我通过在Groovy jar之前的类路径中添加javax.servlet-api-3.1.0.jar来“修复”这个问题。也就是说,将其移动到模块设置的Dependency选项卡中groovy 2.3.6库的上方


现在我手动下载了servlet jar,也许我可以用grape来改进它。

我在命令行上遇到了同样的错误,使用groovy 2.3.6cmd行可以很好地使用groovy 2.3.6$spring run HelloWorld.groovy。然后,您应该添加如何在CLI上运行它以及如何在IDEA中运行它。根据您的问题,我假设:CLI上的groovy HelloWorld和类或main上的Shift+F10。后者大致相当于在CLI上使用groovy运行它。我的想法是一样的,所以我删除了servlet-api-2.4.jar,但结果是一样的。此外,cmd行使用相同的Groovy发行版,这确实有效。。。我认为这与指示SpringBoot使用3.0API有关。有一些文档可以让Spring有机会这样做。iirc SpringApplicationBuilder。然而,我希望SpringApplication已经这样做了。。。无线索的
@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);
    }
}
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)