使用 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/