Java 如何使用graaljs?是否有一个地方可以获取.jar文件/文件?

Java 如何使用graaljs?是否有一个地方可以获取.jar文件/文件?,java,nashorn,graalvm,Java,Nashorn,Graalvm,我使用Java8,使用默认的JavaScript引擎(Nashorn) 我想看看它与“大肆宣传”的GRAAL JS相比如何。 见: 特别是因为我听说他们想贬低纳肖恩: 有人知道如何(轻松)访问graaljs吗? 我希望找到pom.xml或下载jar文件的地方 但是运气不好好吧,很遗憾我会回答我自己的问题。 经过一番研究,我发现我无法在Java8上运行它,而且graaljs没有.jar(我也不能手动创建它) 详情如下: 目前,GraalVM之外没有Graal.js的预制罐。要在其他J

我使用Java8,使用默认的JavaScript引擎(Nashorn)

我想看看它与“大肆宣传”的GRAAL JS相比如何。 见:

特别是因为我听说他们想贬低纳肖恩:

有人知道如何(轻松)访问graaljs吗? 我希望找到pom.xml或下载jar文件的地方
但是运气不好

好吧,很遗憾我会回答我自己的问题。 经过一番研究,我发现我无法在Java8上运行它,而且graaljs没有.jar(我也不能手动创建它)

详情如下:


目前,GraalVM之外没有Graal.js的预制罐。要在其他JDK上运行它,您可以从GraalVM中提取JAR或按如下方式构建它:

$ git clone git@github.com:graalvm/graaljs.git
$ git clone git@github.com:graalvm/mx.git
$ export PATH=$PWD/mx:$PATH
$ export JAVA_HOME=/usr/java/jdk1.8.0_161
$ cd graaljs/graal-js
$ mx build
注意,它使用JDK 8构建得很好。它也在JDK 8上运行:

$ mx js
> typeof([] + 1)
string
>
shell工作,Ctrl+D退出它。上一个命令行中的
-v
选项显示了如何启动它:

$ mx -v js
...
env JAVA_HOME=/usr/java/jdk1.8.0_161 ... \
/usr/java/jdk1.8.0_161/bin/java -d64 -cp /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar:/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar:/tmp/graal-js/graal/tools/mxbuild/dists/truffle-profiler.jar:/tmp/graal-js/graal/tools/mxbuild/dists/chromeinspector.jar:/tmp/graal-js/graal/sdk/mxbuild/dists/launcher-common.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-launcher.jar:/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar:/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar:/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar -Dtruffle.js.BindProgramResult=false -Xms2g -Xmx2g -Xss16m com.oracle.truffle.js.shell.JSLauncher
因此,它将这些JAR放在类路径上:

$ java -cp /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar:/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar:/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar:/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar:/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-scriptengine.jar:. Test
ECMAScript ECMA - 262 Edition 6: Graal.js [Graal.js, graal.js, Graal-js, graal-js, Graal.JS, Graal-JS, GraalJS, GraalJSPolyglot, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
ECMAScript ECMA - 262 Edition 5.1: Oracle Nashorn [nashorn, Nashorn, null, null, null, null, null, null]
string
  • /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar
  • /tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar
  • /tmp/graal js/graal/tools/mxbuild/dists/truffle profiler.jar
  • /tmp/graal js/graal/tools/mxbuild/dists/chromeinspector.jar
  • /tmp/graal-js/graal/sdk/mxbuild/dists/launcher-common.jar
  • /tmp/graal-js/graal-js/graal-js/mxbuild/dists/graaljs-launcher.jar
  • /tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar
  • /home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar
  • /home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar
  • /tmp/graal-js/graal-js/graal-js/mxbuild/dists/graaljs.jar
查看构建工件,我们还可以看到负责向脚本引擎API注册Graal.js的
mxbuild/dists/graaljs scriptengine.jar

使用小测试文件:

import javax.script.*;
import java.util.Arrays;
public class Test {
  public static void main(String... args) throws ScriptException {
    ScriptEngineManager manager = new ScriptEngineManager();
    for (ScriptEngineFactory factory : manager.getEngineFactories()) {
      System.out.printf("%s %s: %s %s%n", factory.getLanguageName(), factory.getLanguageVersion(), factory.getEngineName(), factory.getNames());
    }
    ScriptEngine engine = manager.getEngineByName("Graal.js");
    if (engine != null) {
      Object result = engine.eval("typeof([] + 1)");
      System.out.println(result);
    }
  }
}
在股票JDK 8上编译并运行它可以提供:

$ javac Test.java
$ java -cp . Test
ECMAScript ECMA - 262 Edition 5.1: Oracle Nashorn [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
现在,类路径上有了Graal.js:

$ java -cp /tmp/graal-js/graal/sdk/mxbuild/dists/graal-sdk.jar:/tmp/graal-js/graal/truffle/mxbuild/dists/truffle-api.jar:/tmp/graal-js/graal/regex/mxbuild/dists/tregex.jar:/home/gmdubosc/.mx/cache/ASM_DEBUG_ALL_702b8525fcf81454235e5e2fa2a35f15ffc0ec7e.jar:/home/gmdubosc/.mx/cache/ICU4J_6f06e820cf4c8968bbbaae66ae0b33f6a256b57f.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs.jar:/tmp/graal-js/graaljs/graal-js/mxbuild/dists/graaljs-scriptengine.jar:. Test
ECMAScript ECMA - 262 Edition 6: Graal.js [Graal.js, graal.js, Graal-js, graal-js, Graal.JS, Graal-JS, GraalJS, GraalJSPolyglot, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
ECMAScript ECMA - 262 Edition 5.1: Oracle Nashorn [nashorn, Nashorn, null, null, null, null, null, null]
string
(请注意,此命令行忽略
truffle profiler
chromeiinspector
launcher common
graaljs-launcher
,这些在通过脚本引擎使用Graal.js时是不必要的。)


由于标准JDK 8不支持JVMCI和/或Graal编译器,因此JS将不会有JIT编译,因此在性能方面不要期望太多。要获得性能,您需要一个特殊的JDK 8或JDK 9+以及Graal Truffle绑定。

GraalJS与GraalVM捆绑在一起。你可以从他们的网站上下载GraalVM发行版:linux和MacThanche@jornverne,但这是否意味着我不能在我的JDK上使用它?为什么?GraalJS需要GraalVM/Truffle来运行。我相信目前只有Graal的AOT部分包含在标准JDK中。d感谢您的详细解释,我将测试它,如果正确,我将选择它作为正确答案