2011年5月4日

Grails project 發佈時 UnsupportedClassVersionError 問題

經歴過 Grails v1.0.4 / v1.0.1 / v1.3.7 等版本, 也用過 Eclipse + Groovy plugin 工具; 對於開發軟體的過程而言, 並不會跳脫指令的使用。像是 create-controller ... 等, 這不過是 terminal 模式與 [External Tools] 的 launching 方式不同。當然, 這些是環境變數 JAVA_HOME、GRAILS_HOME ... 等(範疇), 在工具外或工具內的應用而已。

對於寫過 Eclipse plugin 的人, 像是 STS v2.5.x 這樣的工具, 就像是把部份的指令模式做成 context menu; 用起來當是比先前用 [External Tools Configuration] 方便許多; 但是為解決 "linked resource" 問題, SpringSource.com 將功能做在 v2.6.0 版本之中。雖然問題克服了, 但相對上使用這樣更新一版的 IDE 工具, 無形之中已經改用了不同版本的 groovy ; 可能存在著一些編譯的風險跟問題。

除此之外, 在新版的 Grails 中, 編譯 script 用到不同版本的 ANT; 對於已熟悉 Eclipse 的設定、或慣用 ANT script 的人來說, 控制編譯的版本 (source / target options), 似乎不能一下了解新版的運作情形。最常見的就是使用 Java 6 的 JDK (通常會去控制 Eclipse / project 設定 / ANT build file 等), 經過工具的 packing 並 deploy 至 Java 5 run-time 環境時, 會發生 UnsupportedClassVersionError !

解決的方法, 如同這篇的敍述, 是去變更 grails 安裝目錄下的 build.properties。

但, 我們所知道的是, ANT 這樣子的工具是支援 system properties 的; 也就是說, 可以在進行編譯 script 時加 VM options , 就可以變更 system properties。所以, 可以在 STS v.2.6.0 的 context menu 操作時輸入相關 options, 如下所示:







不過試過之後, 並沒有發生作用。也許之前的版本可以, 但沒有多餘的時間去測試了。

2 則留言:

Julian 提到...

不錯的解法. 收下了.
現在也用grails開發,
之前也碰過類似的問題,常常deploy了
才發現compile的版本不一樣.

Unknown 提到...

吔~
開始有同好囉!