让Rhino JS看Java类
我正在玩Rhino ,我已经成功使用了stdlib中的Java类,但是没有使用我编译的Java代码。
例如,这很好用:
print(new java.util.Date());
但是使用NanoHTTPD (单个.java文件,没有名称空间,相同的文件夹),我根本就没有运气:
js> new Packages.NanoHTTPD() js: "", line 4: uncaught JavaScript runtime exception: TypeError: [JavaPackage NanoHTTPD] is not a function, it is object. at :4
我确信这很简单。 我错过了什么?
编辑 :我发布它是这样的:
$ CLASSPATH=. java -jar rhino.jar
或这个:
$ java -classpath . -jar rhino.jar
或者我将NanoHTTPD.java移动到文件夹“./nano”中,添加了package nano;
到文件的顶部,编译它,然后替换“。” 在上面的类路径分配中使用“nano”。
无论如何,我在翻译中看到:
js> java.lang.System.getProperty("java.class.path") /Users/me/blah/rhino.jar
你需要像这样运行Rhino:
java -cp /path/to/rhino/js.jar:. org.mozilla.javascript.tools.shell.Main
这会将当前目录添加到类路径中。 使用-jar
clobbers类路径。 (类路径分隔符取决于您的操作系统。)
然后试试
js> Packages.NanoHTTPD [JavaClass NanoHTTPD]
如果它显示[JavaPackage NanoHTTPD]
,则表示它没有找到该名称的类。
无论如何你都无法实例化NanoHTTPD,所以我猜你想尝试一下Packages.NanoHTTPD.main([])
东西。
在我的Linux中,我发现命令’rhino’是一个运行’org.mozilla.javascript.shell.Main’的shell脚本,带有’-classpath’选项。 您可以编辑该文件以包含类的路径。
我认为该剧本是自我解释的。 如果使用Linux,请键入:
less `which rhino`
如果您不打算在Rhino中使用自己的clases,通常按以下方式运行:
java -jar ./js.jar
使用-jar
开关的问题在于,在这种情况下您无法定义classpath
,如果不设置classpath
,则无法访问自己的包和类。
为了能够设置classpath
您需要使用-cp
开关运行Rhino。 在这种情况下,您可以通过-cp
开关设置classpath
,该开关应包含Rhino包和您的包,还需要在包内传递Rhino的主类路径( org.mozilla.javascript.tools.shell.Main
)
以下是如何将自己的包添加到Rhino类路径的示例:
假设您的类mypackage.myclass
放在mylib.jar
如果您想在Rhino会话中使用此类,则需要按以下方式运行Rhino:
java -cp "./js.jar;../mylib.jar" org.mozilla.javascript.tools.shell.Main
然后你可以访问你的class级:
jc> mc_obj = new Packages.mypackage.myclass()
确保当前目录包含在类路径中。 默认的类路径是当前目录,但是如果类路径已被设置为其他东西(例如通过rhino启动脚本),那么您可能遇到此问题。
您也可以尝试将测试类放在一个包中,看看它是否有一些顶级类的怪癖。
- Tomcat 6 vs 7 – lib vs shared / lib – jars only?
- 来自远程目录的Java Class.forName()
- Mac用户 – 如何在Mac中设置CLASSPATHS(我正在进行Lucene演示)
- IntelliJ:如何将文件夹中的所有jar文件添加到classpath
- 在Tomcat 8中将外部资源添加到类路径
- 为什么System.setProperty()不能在运行时更改类路径?
- 自定义Java PMD规则:找不到CustomRule类
- 在代码上获取ClassNotFoundException:“Class.forName(”com.microsoft.sqlserver.jdbc.SqlServerDriver“);”
- 在cygwin中将多个jar文件设置为classpath