我想使用Nashorn控制台替代Rails c。例如,我想调用Java方法从远程系统导入数据并执行数据迁移。我发现这很有趣:
https://www.baeldung.com/java-nashorn
$JAVA_HOME/bin/jjs
jjs> print("test");
test
jjs>
例如,如何从部署在Wildfly服务器上的WAR包中调用某些Java方法并传递一些参数?
您可以提出更好的选择吗?
答案 0 :(得分:3)
请参阅Oracle的“ Java脚本程序员指南”第3章“ Using Java From Scripts”:
要从JavaScript访问原始和引用Java类型,请调用Java.type()函数,该函数返回一个类型对象,该对象与作为字符串传入的类的全名相对应。下面的示例向您展示如何获取各种类型的对象:
var ArrayList = Java.type("java.util.ArrayList"); var intType = Java.type("int"); var StringArrayType = Java.type("java.lang.String[]"); var int2DArrayType = Java.type("int[][]");
由Java.type()函数返回的类型对象可以在JavaScript代码中使用,类似于在Java中使用类名的方式。例如,您可以使用它实例化新对象,如下所示:
var anArrayList = new Java.type("java.util.ArrayList");
尽管您的问题对您要尝试执行的操作有点含糊。如果您在应用程序中使用Nashorn,则使用该脚本执行的脚本将有权访问应用程序执行的Java类。
答案 1 :(得分:2)
Java:
package com.stackoverflow;
public class Foo {
public static String bar(String name) {
System.out.format("Hi there from Java, %s", name);
return "greetings from java";
}
}
JavaScript:
var javaFooClazz = Java.type('com.stackoverflow.Foo');
var result =javaFooClazz.bar('John Doe');
print(result);
答案 2 :(得分:1)
因为nashorn在Java 11中已弃用,所以我建议使用Groovy作为脚本语言。它类似于Java,并且受spring框架的支持-如果不能使用javascript的话。否则,您应该关注Java领域的讨论-也许GraalVM将是Java的下一个JavaScript引擎-另外我还了解到它们正在Nashorn上运行-因此,目前在这里还不确定未来。