7

我正在尝试在 Grails 3.1 中禁用自动重新加载/重新编译,因为我想改用 JRebel。我发现弹簧加载相当有限,但更重要的是不断失败

File /Users/engrun/Development/projects/grailsPoc/grails-app/controllers/grailsPoc/HelloController.groovy changed, recompiling...
java.lang.IllegalAccessException: Class org.springsource.loaded.ReloadableType can not access a member of class org.springframework.aop.framework.CglibAopProxy$ClassLoaderAwareUndeclaredThrowableStrategy with modifiers "public"

我已经尝试了所有我发现可用的设置,但是,在运行 run-app 命令时,没有一个实际上会禁用重新加载

我努力了

disable.auto.recompile=true

在命令行、GRAILS_OPTS 和 application.yml 中

我试过了

-noreloading

标志,在命令行和 GRAILS_OPTS 上。

根据文档,这应该可以工作 https://grails.org/wiki/Auto%20Reloading

并且在这里接受的答案是正确的, 如何在 grails 3.0.0 应用程序中禁用重新加载? 也不起作用。

有没有人真正成功地在 Grails 3.1 中禁用了自动重新加载?(并使用 JRebel 成功配置了 Grails 3?)

4

3 回答 3

9

在 3.x 应用程序中,您可以通过添加禁用 Spring Loaded

grails {
   agent {
      enabled = false
   }
}

build.gradle.

于 2016-02-05T20:40:22.707 回答
4

Burt 的回答与问题有关-> 如何禁用自动重新加载是正确的。

但是,安东的回答与让 Jrebel 工作的第二个/相关问题有关。

我现在有一个工作示例,它适用于两者

gradle bootRun -Pjrebel   -> disable springloaded, using jrebel
gradle bootRun            -> uses springloaded

grails
grails> run-app

我的配置是

export GRAILS_OPTS="-javaagent:$JREBEL_HOME/jrebel.jar -Drebel.base=/Users/<username>/.jrebel"

和 build.gradle

rebel {
  alwaysGenerate = false
  showGenerated = true
//rebelXmlDirectory = "build/classes"
}

if (project.hasProperty('jrebel')) {
  bootRun.dependsOn(generateRebel)
  grails {
    agent {
      enabled = false
    }
  } 
  tasks.withType(JavaExec) {
    jvmArgs "-javaagent:jrebel.jar"
    jvmArgs "-Xverify:none"
  }
}

感谢@burt-beckwith 和@anton-arhipov 的意见!

于 2016-02-08T09:54:36.220 回答
3

要为 Grails 3 项目启用 JRebel,您需要使用 build.gradle 文件中 jrebel.jar 的相应路径配置 -javaagent 参数:

tasks.withType(JavaExec) { jvmArgs "-javaagent:jrebel.jar" }
于 2016-02-06T23:27:31.297 回答