一尘不染

Spring Boot + Spring-Loaded(IntelliJ,Gradle)

spring-boot

我想在我的Spring Boot项目中使用热插拔。尽管文档涵盖了本主题,但我仍无法通过在IDE(IntelliJ)中运行它来使其正常工作。我只是使用具有VM属性的main方法运行该类:

-javaagent:/path/to/jar/springloaded.jar -noverify

我的问题是,如何使它起作用?:-)

进一步的问题是如何使用Gradle和IntelliJ加载的弹簧。我发现强迫开发人员手动下载JAR,将其放在某个位置并使用JVM参数指向它非常不方便。有什么更好的方法(我应该配置自己的任务来完成工作,并从我的IDE作为Gradle任务运行它)吗?


阅读 314

收藏
2020-05-30

共1个答案

一尘不染

您需要按照文档中所述配置项目:

http://docs.spring.io/spring-boot/docs/current-
SNAPSHOT/reference/htmlsingle/#howto-reload-springloaded-gradle-and-intellij-
idea

之后,您必须配置IDE以在build / classes /
main中输出编译的类(使用Idea插件,您可以按照上述链接中的配置配置outputDir,然后调用gradle idea以完成此操作)。

然后,如果您启动任务(run / bootRun)或使用调试模式从IDE的主类运行,则在 编译 类时,热代码重载应该可以工作。

这里的问题是,与Eclipse不同,IntelliJ在保存类时不会自动编译一个类(即使将编译器配置为“在保存时构建”,在运行/调试时也不会这样做)。

如果spring boot提供了一个配置选项来监视您的源代码文件并在它们更改时重新编译它们,那将是理想的-
这就是Grails所做的。但是我认为这样的想法尚不存在,甚至可能无法将它与gradle结合使用,而gradle是负责管理类路径和此类事情的负责人。

据我所知,有两种选择:

  • 您记得要编译所有编辑内容(如先前StackOverflow链接中所建议的那样,添加一个更简单的“编译”快捷方式可能会有所帮助)。
  • 您放置了一些文件系统监视器(例如Linux的inotify-tools,在Mac OS X上启动的示例),当在任何源代码文件中检测到更改时,它们将调用gradle compileJava / compileGroovy。

首先是乏味的,其次是缓慢的:)。实际上,还有另一种选择:更改IDE :-D(或安装EclipseMode IntelliJ插件)。

2020-05-30