Встроить аватар JS в пример приложения Java

Используя 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 ответ

Решение

Я понял это, соответствующий код, который я запускаю, выглядит так:

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.

Другие вопросы по тегам