当前位置: 首页 > 面试题库 >

如何使用graaljs?是否有放置.jar文件的地方?

庞修贤
2023-03-14
问题内容

我使用Java 8,并且使用默认的JavaScript引擎(Nashorn)。

我想看看它与“高度宣传”的GRAAL JS相比如何。看到:

  • https://github.com/graalvm/graaljs
  • https://www.graalvm.org/

特别是因为我听说他们想弃用nashorn:

  • http://openjdk.java.net/jeps/335

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


问题答案:

目前,在GraalVM之外没有可用的预先构建的Graal.js jar。要在其他JDK上运行它,可以从GraalVM中提取jar或按以下方式html" target="_blank">构建它:

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

外壳程序有效,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

因此,它将这些罐子放在类路径中:

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

查看构建工件,我们还可以看到mxbuild/dists/graaljs-scriptengine.jar哪个负责向脚本引擎API注册Graal.js。

使用一个小的测试文件:

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-profilerchromeinspectorlauncher-commongraaljs- launcher其中通过脚本引擎使用Graal.js时不是必需的。)

由于标准JDK 8不支持JVMCI和/或Graal编译器,因此将没有用于JS的JIT编译,因此不要对性能抱有太大期望。为了获得性能,您需要特殊的JDK
8或JDK 9+以及Graal-Truffle绑定。



 类似资料:
  • 我使用Java8,使用默认的JavaScript引擎(Nashorn)。 我想看看它与“大肆宣传”的GRAAL JS相比如何。见: https://github.com/graalvm/graaljs 特别是因为我听说他们想贬低nashorn http://openjdk.java.net/jeps/335 有人知道如何(轻松地)访问graaljs吗?我希望能找到一个pom。xml或下载jar文件

  • 问题内容: 我的webapp允许用户上传jar文件。但是,将jar文件上传后,它已损坏。我已经通过比较md5校验和(winmd5free)对此进行了验证。 上传的jar文件看起来“正常”和“正确” 与原始文件相比,文件大小看起来不错(在KB级别) 我可以使用7z打开上载的jar文件并查看其内容(资源和类文件),并且与原始文件相比,一切都相同 当我打开上载的jar文件(使用Notepad ++)时,

  • 我在独立应用程序中使用Maven,我想将所有依赖项打包到库文件夹中的JAR文件中,正如这里的答案之一所提到的: 如何使用Maven创建具有依赖项的可执行JAR? 我希望我的最终JAR文件有一个库文件夹,其中包含作为JAR文件的依赖项,而不是像那样将依赖项以文件夹的形式放在.m2文件夹中的Maven层次结构。 实际上,当前的配置符合我的要求,但在运行应用程序时,我在加载JAR文件方面遇到了问题。我不

  • 我正在为SAP hana云平台开发一个需要UnlimitedJCEPolicyJDK8的实现。文档告诉我需要将其置于以下结构下: WAR文件:meta-inf-ext_security-jre8 问题是,当我包含JAR时,它会转到WEB-INF/类,而服务器并不在这方面。如图所示。 尝试了以下操作: 使用eclipse web部署程序集添加文件(无论出于什么原因,它似乎不能与maven一起工作,是

  • 我在我的项目中使用了Maven和几个库,其中一些嵌套在最后的JAR文件中。 提前谢了。

  • 我有一个标准的Spring靴项目。 我有一个/src/main/resources文件夹,其中有几个配置文件。 我怎样才能用Gradle做到这一点呢?