最新的Java主版本(Java SE
又稱Mustang)現在正處於beta版本階段
雖然該版本並不像Java
的更新那麼多
但是它確實有一些有趣的新特性
毋庸置疑
其中的一個就是對腳本編寫語言的支持
諸如PHP
Ruby
JavaScript
Python(或Jython)之類的腳本編寫語言被廣泛應用於許多領域
並由於其靈活性和簡單性而大受歡迎
由於腳本是被解釋而不是被編譯的
所以可以輕松地從命令行運行和測試它們
這就壓縮了編碼/測試周期
並提高了開發人員的生產率
腳本通常是動態鍵入的
其語法極富表現力
所編寫出的算法要比Java中的等效算法簡明得多
使用起來通常也很有趣
在很多情況下
從Java使用腳本編寫語言會很有用
比如為Java應用程序提供擴展
以便用戶可以編寫自己的腳本進行擴展或定制化核心功能
腳本編寫語言可讀性更強
也更容易編寫
所以(從技術上來說)它們是用於為終端用戶提供根據需求定制化產品的可能性的理想語言
早已經有許多Java可用的獨立腳本編寫包了
包括Rhino
Jacl
Jython
BeanShell
JRuby等
新消息是Java
通過一個標准接口為腳本編寫語言提供了內置支持
Java
提供對JSR
規范的全面支持
該規范提供了一種從Java內部執行腳本編寫語言的方便
標准的方式
並提供從腳本內部訪問Java資源和類的功能
Java
附帶了與Mozilla Rhino的JavaScript 實現的內置集成
基於該規范
對諸如PHP
Groovy和BeanShell之類的其它腳本編寫語言的支持也正在進行中
本文關注的是Rhino實現
但是其它語言應該是基本相同的
那麼如何在Java
中使用JSR
的實現呢? 偶經過仔細地研究
終於找到了解決方法
干活要從理論開始
根據JavaDoc的說法
javax
script
ScriptEngineManager 是通過JAR規范中所謂的服務提供商(Service Provider)方法來在庫中檢索 javax
script
ScriptEngineFactory 實現類並自動注冊的
OK
了解了這個就好辦了
准備開始干活哈
開始動手干活了
:)
首先制作JSR
規范實現的包(包括SUN的JavaScript默認實現):
使用WinRAR等壓縮工具打開JRE
中rt
jar文件(注意要提前備份!我的就是備份為jsr
jar)
如圖
所示:
圖
rt
jar的目錄結構
OK
下面開始刪除文件
除了com
sun
script
javax
script
META
INF目錄之外
其余的目錄全都刪除
刪除後如下圖所示
圖
刪除後的目錄結構
目錄做好之後
下面開始按照JAR規范所描述的Service Provider方法來創建文件以便於 javax
script
ScriptEngineManager 的檢索
在METAINF目錄下建立一個名稱為 services 的目錄
在 services 目錄中新建名稱為 javaxscriptScriptEngineFactory 的空文件
在 javaxscriptScriptEngineFactory 文件中寫入comsunscriptjavascriptRhinoScriptEngineFactory數據注意不寫引號
圖 新加入的services目錄和文件
最後將所有改動保存到jsrjar文件中工作完成!
測試包
將jsrjar加入到項目的庫中然後編寫下面的代碼
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = managergetEngineByName(js);
engineput(age );
engineeval(if (age >= ){ +
print(Old enough to vote!); +
} else { +
print (Back to school!); +
});
這時控制台應返回Old enough to vote! 下面是其在Eclipse下運行的截圖
圖 測試程序在Eclipse下的運行情況
參考資料
JSR(Scripting for the Java Platform)規范
Mustang與RhinoJava 中的腳本編寫
JAR規范中的Service Provider描述#Service%Provider
本文的技術支持中國Eclipse社區()
jsrjar包下載jar
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19432.html