Mic*_*sef 9 javascript java java-8 nashorn
是否有任何好的教程或喜欢与此声明?我还没有用Java编写任何脚本,尽管我已经熟悉了JavaScript.谢谢.基本上,我想使用JavaScript/XML来处理我的项目的一部分.我知道Java 8通过Nashorn引入了JavaScript支持.我想知道它是如何工作的.我知道它涉及使用javax.script,但我不知道该包是如何工作的,也不知道Nashorn是如何工作的.
小智 16
在过去的几周里,我和nashorn一起玩了很多.我在一个示例驱动的教程中写了我的所有发现:
http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/
它包括以下主题:
我希望从Nashorn开始对你有所帮助.
Vik*_*mov 11
最近,我做了几个关于Java和JavaScript的演讲(通过Nashorn).您可以在此处找到我的幻灯片和示例.
这是一个非常简单的脚本运行器实现
import javax.script.*;
public class ScriptRunner {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
String scriptName = args[0];
Bindings bindings = nashorn.createBindings();
bindings.put("scriptFileName", scriptName);
nashorn.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
nashorn.eval("load('src/main/resources/javascript/' + scriptFileName)");
}
Run Code Online (Sandbox Code Playgroud)
}
test.js,您可以作为应用程序参数传递.
print("This is hello from test.js");
Run Code Online (Sandbox Code Playgroud)
此外,jjs
JDK8还附带了一个工具.它是CLI JavaScript解释器.它可以用于在JavaScript和Java中编写shell脚本.(好的SO建议如何改进jjs
osx,linux).这是一个这样的脚本的例子
#!/usr/local/bin/jjs -scripting
var currentDir = new java.io.File('.'),
allFiles = currentDir.list();
print(currentDir.getCanonicalPath());
for (var i = 0; i < allFiles.length; i++) {
print(allFiles[i]);
}
Run Code Online (Sandbox Code Playgroud)
如果您有任何问题,请随时提问.
谢谢,
维克
Nashorn 可通过标准 Java JSR 223 脚本 API 进行访问。
一个很好的通用示例如下:
http://www.drdobbs.com/jvm/jsr-223-scripting-for-the-java-platform/215801163
Nashorn 具体指导在这里:
https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes
这是我的代码加载静态库脚本并构建可调用自定义函数的示例:
public class ScriptRunner {
private static final Logger log = LoggerFactory.getLogger(ScriptRunner.class);
private static final String ENGINE = "nashorn";
private String functions;
public ScriptRunner() throws IOException {
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("your/class/path/*.js");
log.debug("Found {} script resources", resources.length);
StringBuilder functions = new StringBuilder();
for (Resource resource : resources) {
functions.append(IOUtils.toString(resource.getInputStream()));
}
this.functions = functions.toString();
}
/**
* Build an Invocable script.
* @param script The function code.
* @return Compiled, invocable script.
*/
public Invocable buildInvocable(String script) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName(ENGINE);
engine.eval(functions);
engine.eval(script);
return (Invocable) engine;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10579 次 |
最近记录: |