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, 如下所示:







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

2011年5月3日

OS X 的 Fax modem 安裝

曾經因為軟體開發而測試 windows 平台的刷卡機, 但因使用 MacBook 而尋求 solution 時, 買了 RS232 轉 USB 的連接線 (RS232 頭接在刷卡機); 主要的方法是建立一個 windows 的 VM, 並分享這個 USB device 給它。

當時買的時候很怕買錯, 經 survey 後決定買了 FTDI 相容的連接線, 也順利地安裝、分享給 VM; 並且, 在 Mac 上寫好的 Java 程式能很順利偵測及接收自 windows VM 傳過來的訊號。 當然, 除了沒影響工作之外, 正好有傳真的需要而開始 K 資料, 依這篇 設定 printer/fax 的方法來設定 fax modem, 將可以算是古董的 56K/v.92 modem 利用 9pin轉 25pin 的接頭接上, 並順利使用列印傳真功能。

正當這一切是如此美好; 索幸工作之需而取得新的 MacBook Pro, 有很多工作上的檔案都移至新機來作業; 但不巧的是, 這份美好只留給 v10.4 的 Tiger 而不是 v10.6 的 Snow Leopard。
可惜我不是 Mac Geek, 沒法 K 懂一些 port 文, 殘念!只好需要傳真時, 回頭使用那台 MacBook 了。

2011年5月1日

Groovy 中 Map 的新增操作

延續前一篇 Groovy中Map的鍵值型別, 就 Map 物件的新增操作也需小心處理。

通常在做記憶體的複製處理時, 將必要的資料以鍵值識別存放在 Map 物件之中,
所以操作時常會使用:
def container = [:]
...
container += [ "${string_object}" : some_object ]
...
但, 我們知道 "${string_object}" 實為 GString, 而不是 String; 在存取 Map 時就可會找不到物件。
所以, 可以的做法是使用 API 的方式來解決:
...
container.put(string_object, some_object)
...