2017-06-14 6 views
0

Javaアプリケーション内でJavascriptライブラリmultilang-extract-commentsを使用しようとしています.JavascriptエンジンとしてRhinoを使用し、RhinoとNodeJSの間のインターフェイスにRhinodoを使用することにしました。しかし、私は実際にRhinodoを使う方法を理解することはできません。私は、Rhinodo(ブランチ、jshint、および休憩のためのmavenプラグイン)を使用するプロジェクトのコードを見てきましたが、私はコードをかなり秘密にしています。私は(自分のアプリケーションのためのいくつかの編集で)次のようなコードを実装しようとしました:RhinoとRhinodoを使用したJavaのNodeJSライブラリの使用

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

答えて

0

で見つけることができます。しかし、誰かがこの方法でRhinodoを使用することに決めた場合、問題の一部は私が実際にNodeModuleProviderを使用していないことでした。私は、あなたが私のコードスニペットで使用さ見ることができますRhinodoBuilder.moduleFactory()メソッド(でNodeModuleProviderを使用

// 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); 

:私の必要なノードモジュールを試してみて、ロードするために、私は次のようなコードを使用しました質問)。ただし、私ができなかった問題を解決する必要があるかもしれないことに注意してください:後でRhinoからインポートされたモジュールを使用する。

最終的には、javascriptをexecを使ってコマンドとして呼び出す方がはるかに意味があると判断したので、同様のことを行う他の誰かがそのソリューションを使用することをお勧めします。

関連する問題