在升级到 Java 1.8 后,在通过 run-app 从 GGTS 执行时,我遇到了分叉的 Grails 进程的问题。在使用 1.8 编译所有内容后,它坚持在较旧的 Java 1.7 JVM 中运行应用程序的分叉实例。这会导致运行时出现不兼容的 JVM 错误:
Caused by UnsupportedClassVersionError: Grails/plugin/springsecurity/userdetails/GrailsUserDetailsService : Unsupported major.minor version 52.0
我花了一些时间环顾四周,看看其他人是否遇到过这个问题,答案是肯定的。但是......除了重新安装GGTS之外没有真正的解决方案。
以下是有关我的环境的信息:
JAVA_HOME = /usr/lib/jvm/jdk1.8.0_65
GGTS.ini = /usr/lib/jvm/jdk1.8.0_65
Installed JRE's = /usr/lib/jvm/jdk1.8.0_65
我的工作区中没有安装 1.7 JRE。我检查了十几次。
GGTS 实例在 1.8 jvm 中运行。长时间运行的 Grails 进程在 1.8 jvm 中运行。如果我从 bash 运行 grails,它和分叉的 grails 实例都在 1.8 jvm 中运行。如果我从 GGTS 运行应用程序,那么分叉的grails 在旧的 1.7 jvm 中运行。我在 1.7 jvm 的任何配置中都找不到任何参考,包括 .grails、GGTS.ini 或工作区中的任何 .eclipse 设置文件。显然,某处的某个文件对我找不到的 1.7 JVM 有“缓存”引用。如果我在 BuildConfig.groovy 中关闭分叉,它会在 1.8 JVM 的主进程中启动 Grails,一切正常。
最后,如果我创建一个新的 Workspace,那么我可以让它在 Java 1.8 中运行 Grails。一旦我切换回具有旧版本 Grails 和 Java 1.7 配置的旧项目,那么神奇地,1.7 JVM 就成为所有工作区的 Grails 分叉实例的首选。
BuildConfig.groovy 中的 fork 指令为 JVM 指定参数,但不指定实际的 JVM 本身。那是从哪里来的?