我想在我的 Spring Boot 项目中使用热插拔。不知何故,我无法通过在我的 IDE (IntelliJ) 中运行它来使其工作,尽管 documentation 涵盖了这个主题.我只是使用带有 VM 属性的 main 方法运行该类:
-javaagent:/path/to/jar/springloaded.jar -noverify
我的问题是,我该如何让它发挥作用? :-)
另一个问题是如何使用 Gradle 和 IntelliJ 加载的 Spring 。我发现强制开发人员手动下载 JAR,将其放置在某处并使用 JVM 参数指向它非常不方便。有没有更好的方法(我应该配置我自己的任务来完成这项工作并从我的 IDE 作为 Gradle 任务运行它)?
最佳答案
您需要按照文档中的说明配置项目:
之后,你必须配置你的IDE,在build/classes/main中输出编译好的类(使用Idea插件,你可以按照上面的链接配置outputDir,然后调用gradle idea
完成)。
然后,如果您启动任务 (run/bootRun) 或使用 Debug模式从 IDE 运行主类,当类编译时,热代码重新加载应该可以工作。
这里的问题是 IntelliJ 与 Eclipse 不同,它不会在保存类时自动编译(即使您将编译器配置为“保存时构建”,它在运行/调试时也不会这样做) .这显然是 IntelliJ 做出的设计决定 - 如此处所述 Intellij IDEA Java classes not auto compiling on save (CrazyCoder 回答)。
如果 spring boot 提供了一个配置选项来监控你的源代码文件并在它们发生变化时重新编译它们,那将是理想的——这就是 Grails 所做的。但我认为这样的想法还不存在,甚至可能无法将其与负责管理类路径之类的事情的 gradle 结合起来。
据我所知,有两种选择:
- 您记得编译您编辑的所有内容(添加更简单的编译快捷方式,如上一个 StackOverflow 链接中的建议可能会有所帮助)。
- 您放置了一些文件系统监视器(Linux 的inotify-tools,Mac OS X 的launchd 就是示例),当在任何源代码文件中检测到更改时调用 gradle compileJava/compileGroovy。
第一个很乏味,第二个很慢:)。实际上还有另一种选择:您更改 IDE :-D(或安装 EclipseMode IntelliJ 插件)。
关于Spring Boot + Spring-Loaded(IntelliJ、Gradle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371111/