使用Groovy和IntelliJ的Spring-Boot Hello World

时间:2014-10-01 08:03:05

标签: groovy intellij-idea spring-boot

我正在尝试基于从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)

2 个答案:

答案 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,也许我可以用葡萄来改善它。