IntelliJ不会终止使用gradle构建的Spring Boot应用程序

Chr*_*ler 42 java spring intellij-idea gradle spring-boot

我在Linux上使用IntelliJ 13.1并尝试按照示例http://spring.io/guides/gs/spring-boot/构建基本的REST应用程序

当我从IntelliJ中执行目标bootRun时,集成的tomcat服务器启动并且一切正常.

10:09:35: Executing external task 'bootRun'...
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:bootRun
Run Code Online (Sandbox Code Playgroud)

但是停止执行不会影响gradle任务:

10:11:40: External task execution finished 'bootRun'.
Run Code Online (Sandbox Code Playgroud)

我仍然可以访问配置端口上的tomcat实例.只关闭IntelliJ会破坏该过程.

我搜索了这个主题但找不到任何合理的答案.我想知道它是不是

  • gradle问题(使用gradle包装器版本1.11)
  • Linux问题(Ubuntu 12.04)
  • IntelliJ问题(IDEA 13.1.2)
  • Spring Boot问题(尝试了从1.0.0.RELEASE到1.1.0.M2的不同版本)

geo*_*and 20

我很确定这是一个IntelliJ问题,因为:

当您运行bootRunIntelliJ的Gradle集成,然后按停止时,应用程序将继续运行,如您所述.

但是,如果您使用命令行并运行gradle bootRun然后使用Cntrl+ C,应用程序就会停止正常.

请注意,我的设置是Windows 7,IntelliJ 13.1.3,Gradle 1.12和Spring Boot 1.1.0.M2.

如果您需要能够轻松调试应用程序,那么您需要做的就是运行具有该main方法的Java(或Groovy)类,因为它是运行Spring Boot应用程序的最简单方法!感谢Spring Boot!

当然,您可以继续使用Gradle执行运行所有测试或创建打包应用程序等任务.

  • 我认为它与`spring-boot:run` forks这一事实有关,它响应Ctrl + C的原因是它手动处理`SIGINT`并结束子进程. (5认同)
  • 有人知道这是否会在Intellij中修复? (5认同)
  • @ChristianMetzler我确实使用Gradle Integration,但是我将其限制为运行项目测试并运行构建过程以创建jar或war.我只是通过运行包含`main`方法的Spring Boot类来调试应用程序! (2认同)