在 Java 个应用示例中嵌入 Avatar JS
Embed Avatar JS in Java Application Example
使用 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 中有很多好的功能,但我正在努力寻找任何像样的文档或示例。任何人都可以提供如何执行此操作的代码示例吗?
我想通了,我的相关代码 运行 看起来像这样:
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 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 中有很多好的功能,但我正在努力寻找任何像样的文档或示例。任何人都可以提供如何执行此操作的代码示例吗?
我想通了,我的相关代码 运行 看起来像这样:
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 本机库位于此目录