Grails 2.3.2 引入 Fork 模式預設啟用,但在特定 JVM/儀器化環境下會觸發 java.lang.instrument ASSERTION FAILED 導致啟動失敗。
Exception in thread "main"
Error |
Forked Grails VM exited with error
java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding"
with message transform method call failed at ../../../src/share/instrument/JPLISAgent.c line: 844
編輯 BuildConfig.groovy,將 grails.project.fork 設為 false:
// 原設定
grails.project.fork = [
run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve: false]
]
// 修改為
grails.project.fork = false
效果:主進程直接執行,繞過 Fork 子進程,避免儀器化衝突。
代價:失去 Fork 隔離優勢 (類卸載、記憶體隔離、熱重載隔離)。
在 BuildConfig.groovy 的 dependencies 區塊加入:
dependencies {
// 其他依賴...
build "org.fusesource.jansi:jansi:1.11"
}
原理:更新底層終端機庫修正儀器化互動問題,Grails 2.3.3 內建此修復。
BuildConfig.groovygrails cleangrails run-app 觀察是否正常啟動若專案允許,**強烈建議升級至 Grails 2.3.3+ 或 3.x/4.x/5.x**,根治該問題並獲得安全性/效能改進。升級前請檢查外掛相容性。
// BuildConfig.groovy 完整 fork 區塊範例
grails.project.fork = [
test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256],
run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256],
war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256],
console: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256]
]