我试图在Java应用程序中使用Javascript库multilang-extract-comments,因此我决定使用Rhino作为Javascript引擎,并使用Rhinodo作为Rhino和NodeJS之间的接口。然而,我不知道如何实际使用Rhinodo。我看过使用Rhinodo (用于早午餐、jshint和休息的maven插件)的项目的代码,但我发现代码非常晦涩难懂。我尝试实现了如下代码(对我的应用程序进行了一些编辑):
rhinodoBuilder
.destDir(rhinodoDestDir)
.moduleFactory(nodeModuleProvider)
.consoleFactory(wrappingConsoleFactory)
.env(env)
.build(new BaseFunction() {
@Override
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
Scriptable brunch = (Scriptable) ScriptableObject.callMethod(cx, scope, "require",
new Object[]{Context.javaToJS("brunch", scope)});
Scriptable options = cx.newObject(scope);
ScriptableObject.putProperty(options, "minify", minify);
System.setProperty("user.dir", userDir.getAbsolutePath());
ScriptRuntime.doTopCall(ScriptableObject.getTypedProperty(brunch, "build", Function.class),
cx, scope, thisObj, new Object[]{
options,
new BaseFunction() {
@Override
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
return Undefined.instance;
}
}
});
return Undefined.instance;
}
});(来自早午餐maven插件)
然而,这段代码不适用于我。我要么在尝试查找我的Javascript库时出错,要么当我使用它应该能够找到的库时(我以fs为例),我得到了一个NullPointerException。有人能告诉我我错过了什么吗?
注意: Rhinodo和使用它的maven插件都可以在MuleSoft's GitHub Repositories中找到
发布于 2017-06-20 04:32:37
我没有找到解决这个问题的方法。然而,如果其他人决定以这种方式使用Rhinodo,部分问题是我实际上并没有使用NodeModuleProvider。为了尝试并加载我所需的Node模块,我使用了类似于以下代码:
// create a module provider for all the node modules in META-INF
String prefix = "META-INF/node_modules/";
String[] moduleNames = {"amodule","anothermodule","modulethethird"};
ArrayList<NodeModuleImpl> moduleList = new ArrayList<NodeModuleImpl>();
for (String module: moduleNames) {
moduleList.add(NodeModuleImplBuilder.fromFolder(prefix+module));
}
NodeModuleProviderImpl nmp = new NodeModuleProviderImpl(moduleList);然后,我在RhinodoBuilder.moduleFactory()方法中使用了NodeModuleProvider (您可以在问题中的代码片段中看到)。但是,需要注意的是,您可能必须解决我无法解决的问题:稍后使用从Rhino导入的模块。
最后,我决定使用exec将我的javascript作为命令调用会更有意义,所以我建议其他执行类似操作的人使用该解决方案。
https://stackoverflow.com/questions/44554990
复制相似问题