对于那些主要的IDE是使用Eclipse开发Grails 3应用程序或插件的人来说,这是一篇小文章-仍然在想如何调试其应用程序。
首先,要澄清一下:没有“ Grails”调试,现在只有Grails 3和Spring Boot和Gradle。任何调试此类应用程序的方法都可以调试Grails 3应用程序。
关于这个主题,有很多SO帖子和Google热门信息,所以我也将本帖子创建为对自己和他人的简短“最简单的解决方案”摘要。
在一些Eclipse版本中,至少在常规Java捆绑包中附带了Eclipse Buildship插件 ,这使我可以在IDE内使用Gradle做很多事情,这是Grails 3的基础。 在执行任何Gradle任务(例如在Grails 3应用程序上执行bootRun
, 如果我也可以使用Buildship进行调试 , 这将非常有用 。
好吧,在撰写本文时,仍然没有这样的事情: 自2015年以来,使用Buildship调试Web应用程序就已经在路线图上。 您可以用它启动Gradle,但还不能调试它。
因此,一种简单的调试方法是: Eclipse的远程Java应用程序调试功能+调试模式下的Gradle 。
尝试使用新的Grails 3.2.7 hello-world应用程序。 (在使用Oracle JDK 8和Eclipse Oygen(4.7)的MacOS上-但这并不重要)
只需2个步骤:
- 使用
./gradlew bootRun --debug-jvm
以调试模式启动JVM - 在Eclipse中创建连接到早期JVM的远程Java应用程序启动配置
使用gradle bootRun --no-daemon -Dorg.gradle.debug=true
确实允许Eclipse以调试模式进行连接,但是Eclipse不会在任何断点处暂停。
举个例子
假定一个干净的Grails 3.2.7应用程序。
在BootStrap.groovy
添加一行,并在其上设置一个断点 :
使用带有--debug-jvm
参数的Gradle包装器(或外部Gradle)以调试模式启动应用程序。
localhost:hello-world tvinke$ ./gradlew bootRun --debug-jvm
Starting a Gradle Daemon (subsequent builds will be faster)
:compileJava NO-SOURCE
:compileGroovy
:buildProperties UP-TO-DATE
:processResources
:classes
:findMainClass
:bootRun
objc[12520]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java (0x1041d24c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10429a4e0). One of the two will be used. Which one is undefined.
Listening for transport dt_socket at address: 5005
> Building 85% > :bootRun
在他看来, 该应用程序停止运行 ,表明它在端口5005侦听,并且直到连接了调试器后,它才会继续(根据设计)。
在Eclipse中创建一个调试配置 (在Debug Configuration下添加一个Remote Java Application条目)-将默认值保留在localhost ,但是将端口更改为5005。
将Eclipse附加到正在等待的JVM,然后使用Debug按钮开始调试。
该应用程序继续启动。 并且实际上停止了我们的断点 。
将来支持使用Eclipse Buildship进行调试
Eclipse Oxygen当前随Buildship 2.0版一起提供。 Buildship何时获得更新,从而可以在IDE中调试Gradle? 在Bugzilla票证 (已移至新的#249 GitHub问题)中 , 没有计划像在常规Java应用程序中那样在Eclipse中获得“ Debug As…”选项。
正如一位开发人员所说:
为此增加便利固然很好,但是还有其他更重要的事情,例如复合构建支持,Kotlin支持,具有正确的运行时类路径等。
Eclipse中还有其他方法吗?
一些人试图从Spring更新站点在Eclipse Mars中安装Spring IDE Core ,并调试作为一个Spring Boot App配置的Grails应用程序-但我再也无法在Eclipse Oxygen下进行此操作。 缺少/失败的依赖关系将阻止一切。
当然,Eclipse可能还有其他方法(也许使用其他Gradle集成),如果您找到了一种方法,请告诉我!
翻译自: https://www.javacodegeeks.com/2017/03/debugging-grails-3-spring-boot-gradle-eclipse.html