William_Shi
众所周知,在最新的JDK15当中,Nashorn已经被彻底移除。
然而,由于MineCraft的大部分用户都在使用Java15以下的版本
所以加载JavaScript的Bukkit插件仍然可以使用
这些插件我想大部分都在使用JDK自带的Nashorn引擎

然而这带来了一个问题
Nashorn当中加载这样的JavaScript代码
Java.type("")
在Java8当中,它返回一个jdk.internal.dynalink.beans.StaticClass
在Java9当中,不存在jdk.internal.dynalink.beans.StaticClass,只有jdk.dynalink这个包(JDK9实现模块化)
那么就会导致不兼容

之后我针对Graal引擎进行了测试,代码如下
package test;

import 省略

public class Test {

public static void main(String... args) throws Exception {
try (Context context = Context.newBuilder().allowAllAccess(true).build()) {
context.eval("js", "Java.type(\"test.Test\").test(Java.type(\"test.Test\"))");
}
}

public static void test(Object obj){
System.out.println(obj.getClass());
}

}
也就是说我执行了这么一段js
Java.type("test.Test").test(Java.type(xxxxxx))
第一个Java.type是拿到了我测试所用的类,test.Test
第二个则是调用这个类的静态方法test,传入的参数是Java.type返回的玩意
输出的是class java.lang.Class
也就是说,并没有jdk internal的东西了
取而代之的就是普普通通的java.lang.class,不存在版本兼容性的问题


那么我希望做一个小调查
如果你正在使用JavaScript写Bukkit插件,你的JS开发前置采用的是Nashorn还是Graal 还是Rhino等其他引擎?
如果你有意愿写一个加载JavaScript的插件(js runtime),你希望采用哪种引擎?


2021.12 数据,可能有更多内容众所周知,在最新的JDK15当中,Nashorn已经被彻底移除。
然而,由于MineCraft的大部分用户都在使用Java15以下的版本
所以加载JavaScript的Bukkit插件仍然可以使用
这些插件我想大部分都在使用JDK自带的Nashorn引擎


然而这带来了一个问题
Nashorn当中加载这样的JavaScript代码
Java.type("")
在Java8当中,它返回一个jdk.internal.dynalink.beans.StaticClass
在Java9当中,不存在jdk.internal.dynalink.beans.StaticClass,只有jdk.dynalink这个包(JDK9实现模块化)
那么就会导致不兼容


之后我针对Graal引擎进行了测试,代码如下
package test;


import 省略


public class Test {


public static void main(String... args) throws Exception {
try (Context context = Context.newBuilder().allowAllAccess(true).build()) {
context.eval("js", "Java.type(\"test.Test\").test(Java.type(\"test.Test\"))");
}
}


public static void test(Object obj){
System.out.println(obj.getClass());
}


}
也就是说我执行了这么一段js
Java.type("test.Test").test(Java.type(xxxxxx))
第一个Java.type是拿到了我测试所用的类,test.Test
第二个则是调用这个类的静态方法test,传入的参数是Java.type返回的玩意
输出的是class java.lang.Class
也就是说,并没有jdk internal的东西了
取而代之的就是普普通通的java.lang.class,不存在版本兼容性的问题


那么我希望做一个小调查
如果你正在使用JavaScript写Bukkit插件,你的JS开发前置采用的是Nashorn还是Graal 还是Rhino等其他引擎?
如果你有意愿写一个加载JavaScript的插件(js runtime),你希望采用哪种引擎?



bleake
萌新表示看不懂

阿哲。
我用的 虚幻4引擎

William_Shi

我说的是JavaScript加载引擎。。。

下一页 最后一页