作為一個Java程序員,你不要想在產品中使用Ruby直到你能夠讓它和存在的Java應用程序和類庫進行交互,而這些程序和類庫之中能夠支持Ruby的很多種類的基本功能。JRuby,JVM下的一個開源Ruby解釋器,能夠在Java裡面使用Ruby類庫。就像標准的Ruby解釋器一樣,除開使用Ruby調用本地方法(C代碼)或者Java類庫以外,Ruby代碼都能夠在JRuby裡面正確執行。
相比較於微軟的.NET平台的公共語言運行時,JVM往往只能夠支持一種語言。但是事實上,JVM平台不僅僅能夠支持Java,而且可以支持Python、JavaScript、Groovy、Scheme,和其他各種語言,這意味著有必要的時候,Ruby代碼能夠和這些語言很好地進行交互。
在2006年7月中旬,JRuby僅僅有一個預覽版本(0.9)。但是它迅速發展起來:一個志願者團隊從2005年一月開始總共發布了五個版本。JRuby通過針對標准解釋器的不斷評估測試逐漸成熟起來,而且現在已經超過90%的測試都是在基本支持Ruby on Rails這個框架。
為了嘗試JRuby,保證Java SE 5 是安裝好了的而且JAVA_HOME環境變量也是設置好了的。從JRuby的工程頁面下載壓縮包然後解壓。設置JRUBY_HOME環境變量到JRuby安裝的根目錄。你可以在bin目錄裡面嘗試著用jirb進行交互。大多數場合,你將使用JRuby解釋器——創建一個文件將文件名作為一個參數傳遞到JRuby的bin目錄下批處理腳本。
除了執行先前的Ruby代碼,你仍然可以使用JRuby來構造Java對象,調用Java方法,從一個Java類繼承。一個Ruby類能夠實現Java接口——有必要的話可以在Java裡面靜態調用Ruby方法。
為了從Ruby訪問Java需要初始化類庫,需要以”java”命令開始。接下來用include_class方法指定需要使用的Java類,比如,include_class “javax.jms.Session”。你能夠使用include_package導入整個Java包到Ruby模塊裡面。就像Java導入包的通配符語句一樣,盡量避免include_package使用產生的名稱沖突是明智的;在JRuby裡,如果解釋器為了需要的類搜索所有的包也是格外不明智的。盡可能嚴格地使用include_class。
很多Java標准類的名稱和Ruby類的名稱相同。為了解決這樣的沖突,傳遞一個代碼塊到include_class函數,為這個Java類返回一個新名稱,而且JRuby將使用這個名稱作為Java類的別名。