RingoJS 与 Java环境集成

RingoJS本身就是构建于Mozilla Rhino之上,Mozilla Rhino是啥——一个Java实现的JavaScript引擎、执行环境…… 这句话对于外人来说,一定觉得很绕……

 

Java Integration

 

Ringo的底层JavaScript Engine——Rhino,可以访问任何装载到JVM环境中的Java Class。这就给了Ringo开发者几乎全部的Java功能,Ringo开发者可以在程序中使用Java的丰富库函数。在Ringo中,我们可以访问Java Class的静态(static)方法,访问常量、创建新的Java对象等等。

常用如下三种方式,将Java类文件或者库(library,jar文件)集成进Ringo:

  1. 将相关的Java Class或者library放入运行环境的classpath(Ringo本质是一个Java环境)
  2. 将Java library(jar文件)放入Ringo的lib文件夹
  3. 将Java library(jar文件)或者java package(文件夹)添加到classpath中(配置classpath)

方法1和2都可以seamlessly集成Java对象,Ringo程序中不需显示指定什么java class或者library被集成……

当然,Java的library和packages也可以在Ringo程序运行过程中显式添加到classpath中,完成集成,Ringo中使用addToClasspath(pathName)来实现这个功能。addToClasspath只有一个参数:pathName,对应要加入的library或者package的绝对路劲。如果想象引入module一样添加java对象,可以使用module.resolve(pathName)方法:

addToClasspath(module.resolve(“./library.jar”))

添加package:

addToClasspath(module.resolve(“./package”));

 

Best Practice:

通常来说,在Ringo模块中,使用addToClasspath()手工加入需要的library或者package是更优选择,原因如下:

  1. 最终用户或者程序员,在下载了你的Ringo package后,不需要修改、配置他们的classpath。
  2. 不需要手工copy  library到他们的Ringo lib 文件夹
  3. 通过addToClasspath()显式添加library和package,如果路径不正确,会抛出异常提示
  4. Explicity adding specific libraries & packages to the classpath serves as a form of documentation for programmers

Examples:

先来个例子演示Ringo如何使用标准Java类、方法:

// Packages is a top=level variable by Rhino to

// access Java package in your JS code

var user = new Packages.com.yourbusiness.User();

user.setUsername(“Bill”);

 

// Rhino provides a shortcut for java.* Packages

var log10 = java.lang.StrictMath.log10(1517.19234);

 

要装载整个package,可以使用importPackage(package):

// Add the Jena library to classpath

addToClasspath(“../lib/jena.jar”);

 

// Import a whole package from the loaded library

importPackage(com.hp.hpl.jena.query);

 

// Use the com.hp.hpl.jena.query.Query class

var query = new Query();

query.executeStatement(“...”);

Leave Comment