在Java应用程序示例中embedded头像JS

使用Java 8,我想以编程方式加载一个JavaScript文件,并使用阿凡达JS执行它(节点env支持)。 我也想用Maven来pipe理依赖关系。

这里是我正在使用的简单的Nashorn片段,我想扩展它以支持Node.JS模块,理想情况下使用阿凡达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); 

相关的Mavenconfiguration也如下所示:

 <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> 

我觉得阿凡达有很多很好的function,但是我正在努力寻找任何体面的文档或例子。 任何人都可以提供一个如何做到这一点的代码示例?

我明白了这一点,我运行的相关代码如下所示:

 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参数传入。 头像本地库驻留在这个目录中

Interesting Posts