使用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>
我的印象是“阿凡达”中有很多优秀的功能,但我很难找到任何体面的文档或示例。任何人都可以提供如何执行此操作的代码示例吗?
答案 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本地库驻留在此目录