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

标签 java node.js nashorn avatarjs

使用 Java 8,我想以编程方式加载 JavaScript 文件并使用 Avatar JS 执行它。 (用于 Node 环境支持)。我还想使用 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 有很多很好的功能,但我很难找到任何像样的文档或示例。谁能提供一个代码示例来说明如何执行此操作?

最佳答案

我明白了,我运行的相关代码如下所示:

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 原生库位于此目录中

关于java - 在 Java 应用程序示例中嵌入 Avatar JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008639/

相关文章:

javascript - 使用 Nashorn 将 ScriptObjectMirror 转换为其他 Java 类

Javascript:eval 中的 replaceAll 不起作用

java - 如何将用户重定向到 Android 中的数据使用设置?

Java 泛型 + 静态工厂方法 = [ panic ]

javascript - 使用 Node.js HTTP 服务器获取和设置单个 Cookie

node.js - 在 node.js 中使用 Promise 从 s3 bucket 下载图像

javascript - nashorn 中的可选链接 (?.)

java - 使用 ArrayList 的 android java insertsort

java - 为什么这个字符串到数组不起作用?

node.js - PowerShell 的 async.parallel?