1

使用 Java 8,我想以编程方式加载一个 javascript 文件并使用Avatar JS执行它(用于 Node env 支持)。我还想使用 Maven 来管理依赖项。

这是我正在使用的简单 Nashorn 片段,我想扩展它以支持 Node.JS 模块,最好使用 Avatar JS。

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
InputStream in = getClass().getClassLoader().getResourceAsStream("js/hello-world.js");
String result = (String)engine.eval(new InputStreamReader(in));
System.out.print(result);

相关的 Maven 配置也如下所示:

<repositories>
    <repository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshots</name>
        <url>https://maven.java.net/content/repositories/snapshots/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>avatar-js</artifactId>
        <version>0.10.32-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>libavatar-js-linux-x64</artifactId>
        <version>0.10.32-SNAPSHOT</version>
        <type>pom</type>
    </dependency>
</dependencies>

我的印象是 Avatar 中有很多很好的功能,但我很难找到任何像样的文档或示例。任何人都可以提供如何执行此操作的代码示例吗?

4

1 回答 1

1

我想通了,我运行的相关代码如下所示:

import com.oracle.avatar.js.Server;
import com.oracle.avatar.js.Loader;
import com.oracle.avatar.js.log.Logging;

String runJs() throws Throwable {

    StringWriter scriptWriter = new StringWriter();
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    ScriptContext scriptContext = engine.getContext();
    scriptContext.setWriter(scriptWriter);
    Server server = new Server(engine, new Loader.Core(), new Logging(false), System.getProperty("user.dir"));
    server.run("js/hello-world.js");

    return scriptWriter.toString();
}

现在,一个简单的hello-world.js

var util = require('util')
var result = util.format('hello %s', 'Phil');
print(result);

java.library.home在运行应用程序时,我还作为 JVM 参数传入。Avatar 原生库位于此目录中

于 2015-06-24T13:43:06.273 回答