Встроить аватар 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.