Spring Boot + Spring-Loaded(IntelliJ,Gradle)

kuc*_*ram 36 spring spring-boot spring-loaded

我想在我的Spring Boot项目中使用热插拔.不知怎的,我无法通过在我的IDE(IntelliJ)中运行它来使其工作,尽管文档涵盖了这个主题.我只需使用带有VM属性的main方法运行该类:

-javaagent:/path/to/jar/springloaded.jar -noverify
Run Code Online (Sandbox Code Playgroud)

我的问题是,我该如何使其发挥作用?:-)

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

geo*_*and 25

如果想要只能从IntelliJ运行应用程序(在主方法上使用右键单击 - >调试)并且根本不涉及Spring Boot的Gradle任务,则只需执行以下操作:

  1. 在IntelliJ中配置运行配置以使用SpringLoaded代理.这很容易做到,下面的屏幕截图显示了一个示例:

在此输入图像描述

注意我是如何添加的VM Option:( -javaagent:/path/to/springloaded-${version}.jar -noverify你可以在这里下载)

  1. 使用右键单击调试 - >调试,如下面的截图:

在此输入图像描述

  1. 每次进行更改并想重新加载时,只需编译项目即可.默认快捷键是Cntrl+ F9,但您也可以从菜单中访问它Build- >Make Project


Dei*_*ote 24

您需要按照文档中的说明配置项目:

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以完成它).

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

这里的问题是IntelliJ与Eclipse不同,它在保存时不会自动编译一个类(即使你将编译器配置为"Build on save",它也不会在运行/调试时执行).这显然是由IntelliJ制作的设计决策 - 如此处所述Intellij IDEA Java类不能自动编译保存(CrazyCoder答案).

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

因此,据我所知,有两种选择:

  • 您记得编译您编辑的所有内容(按照之前的StackOverflow链接中的建议添加更简单的编译快捷方式可能有帮助).
  • 您在任何源代码文件中检测到更改时,会调用一些文件系统监视器(用于Linux的inotify-tools,适用于Mac OS X的示例)调用gradle compileJava/compileGroovy.

首先是单调乏味,第二是慢:).实际上还有另一种选择:更改IDE :-D(或安装EclipseMode IntelliJ插件).


Nán*_*ser 8

我设法在一个Maven项目中使用IDEA执行此操作,它应该与Gradle版本一起工作,我猜,我的程序如下.

  • 设置 - >编译器 - >自动生成项目(仅在未运行/调试时有效!)
  • 使用IDE外部的sprint-boot-plugin启动项目(因为上面的句子,这是一个技巧).

Maven插件设置如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>1.2.0.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

现在更改一些代码并重新加载页面.


Spi*_*der 7

我在IntelliJ Idea中运行SpringBoot和Gradle.自动重装正在100%工作

  • 静态内容是自动重载(即时)
  • Thymeleaf正在自动上载(即时)
  • 控制器/ Java文件要求我点击"构建"按钮(需要几秒钟),但不需要重启 - 它只是编译文件,因此Spring Loaded可以接收它们.

第1步:获取SpringLoaded

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE"
        classpath 'org.springframework:springloaded:1.2.1.RELEASE'
    }
}

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'idea'
apply plugin: 'spring-boot'

repositories {
    jcenter()
    mavenLocal()
    mavenCentral()
}

mainClassName = 'com.noxgroup.nitro.NitroApp'

idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.1.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
}

jar {
    baseName = 'org.noxgroup-nitro'
    version =  '0.1.0'
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}
Run Code Online (Sandbox Code Playgroud)

第2步:创建Application.properties

并添加以下内容:

spring.thymeleaf.cache=false
Run Code Online (Sandbox Code Playgroud)

第3步:运行bootRun任务

(不仅仅是标准的运行任务 - 这增加了SpringLoaded功能)

第4步:编译Java

通过点击"Make Project"或按"Ctrl/Command + F9"来创建Java文件


Mat*_*yne 5

在更高版本的gradle中,您可以启动命令窗口并运行

gradle -t classes
Run Code Online (Sandbox Code Playgroud)

这将启动一个查找源代码更改并重新编译它们的进程.

在另一场比赛中.

gradle bootRun
Run Code Online (Sandbox Code Playgroud)

对java或groovy src的任何更改都将自动重新编译.虽然不是intellij具体,但你最好还是选择intellij.您甚至可以使用自己喜欢的文本编辑器(例如submlime,atom).

币/链接