2

我试图让一个简单的 Spring-Boot 应用程序与 Spring Loaded 和 Gradle 一起工作,但没有任何成功。我尝试了以下方法:

  1. 使用带有bootRun任务的 Spring-Boot 只需在浏览器中使用简单的 F5 即可重新加载静态资源

  2. 如果我bootRun再次使用并通过文本编辑器更改类并且使用compileJava它不起作用。

  3. 如果我IntelliJ Application在现有控制器中进行更改并使用 IntelliJ运行它,make它仅适用于现有方法。不更新新方法、更改签名等。

  4. 使用带有 VM 参数的 IntelliJ:

    -javaagent:C:\Users\myuser\.m2\repository\org\springframework\springloaded\1.2.1.RELEASE\springloaded-1.2.1.RELEASE.jar -noverify

还是什么都不做。

理想情况下,我想只使用 Gradle 来执行这个过程——所以我独立于 IDE

请查看 Github 项目,以便您可以看到我的示例代码: 示例项目

只需执行任何更改DemoController

4

1 回答 1

2

似乎诀窍是使用任务build bootRun而不是简单的“bootRun”。

这是一个 Gradle 构建文件,当 Java 类更改时,它还使用带有增量编译的 watch 插件:

buildscript {
    ext {
        springBootVersion = '1.2.2.RELEASE'
        springLoadedVersion = "1.2.1.RELEASE"
    }
    repositories {
        mavenCentral()
        mavenLocal()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.springframework:springloaded:${springLoadedVersion}")
        classpath 'com.bluepapa32:gradle-watch-plugin:0.1.5'
    }
}

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

apply plugin: "java"
apply plugin: "spring-boot"
apply plugin: 'idea'
apply plugin: 'application'
apply plugin: 'com.bluepapa32.watch'


mainClassName = "com.example.my.Application"

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    runtime("org.hsqldb:hsqldb")
}

task wrapper(type: Wrapper) { gradleVersion = '2.3' }

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

compileJava {
    //enable compilation in a separate daemon process
    options.fork = true
    //enable incremental compilation
    options.incremental = true
}

watch {
    java {
        files files('src/main/java')
        tasks 'compileJava'
    }
}
于 2015-03-14T17:36:26.757 回答