在Java应用程序示例中嵌入Avatar JS

时间:2015-06-23 16:42:47

标签: java node.js nashorn avatarjs

使用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>

我的印象是“阿凡达”中有很多优秀的功能,但我很难找到任何体面的文档或示例。任何人都可以提供如何执行此操作的代码示例吗?

1 个答案:

答案 0 :(得分: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本地库驻留在此目录