热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何让GraalSDK包在没有Maven的情况下工作?

如何解决《如何让GraalSDK包在没有Maven的情况下工作?》经验,为你挑选了1个好方法。

我正在开发一个需要执行Javascript的Java应用程序.Nashorn JS引擎即将被弃用,替换是Graal SDK提供的一组API,它使用GraalVM.基本上执行多种语言的虚拟机.

至少这是我的想法.所以我花了一天时间试图让它运转起来.我下载了使用JDK 8的GraalVM rc6.我使用IntelliJ IDEA,并将GraalVM添加为新的JDK.我发现奇怪的是我应该添加一个虚拟机作为开发工具包,但我知道它基于JDK 8,所以我很好.

而问题与其他问题不同,我无法让新的软件包运行起来.我的IDE告诉我它无法解决它们.

实际上,没有一个org.graalvm软件包可以解析.

所以我下载了JDK 11 build 28,因为据我所知JDK 11自20版开始就附带了GraalVM.

实际上,在这种情况下,可以找到一些软件包,但远远低于预期:例如org.graalvm.polyglot仍然无法解析.

最后,我尝试从Maven添加Graal SDK并解决了包.现在我在运行时遇到异常:

Context ctx = Context.create(“js”);

在类路径上找不到语言和多语言实现.确保truffle-api.jar在类路径上.

我认为前两个案例中的问题实际上并没有获得GraalVM JDK,但它甚至以这种方式抛出了异常.

有经验的人可以解释一下吗?



1> Oleg Šelajev..:

GraalVM

GraalVM是一个高性能的可嵌入多语言虚拟机,目前支持许多编程语言:Java(和JVM语言),Javascript(包括node.js),Ruby,R,Python和C/C++以及其他具有LLVM后端的语言.

您可以在此处下载预先构建的GraalVM分发版:https://www.graalvm.org/downloads .除此之外,它还包括一个java运行时,一个节点运行时,一个名为Graal.js的Javascript引擎等.

Graal SDK是多语言API,允许GraalVM使用它可以运行的所有语言实现.这个多语言API打包为一个jar文件:$GRAALVM_HOME/jre/lib/boot/graal-sdk.jar.

将该文件作为外部库添加到您的IDEA项目/模块中,将允许IDE找到类似以下的类:org.graalvm.polyglot.Context以及org.graalvm.polyglot.Value与语言互操作所必需的类 ,包括Javascript实现.

如果您的项目使用Maven,您可以在该文件上添加系统依赖项,maven将在任何$JAVA_HOME设置为指向GraalVM分发的系统上找到它 .


    org.graalvm
    graal-sdk
    1.0.0-rc
    system
    ${java.home}/lib/boot/graal-sdk.jar

现在,当您java从GraalVM发行版运行命令时,必要的文件将自动添加到类路径中.因此,在IDE中运行类似下面的内容不再需要:

import org.graalvm.polyglot.*;
public class Main {
    public static void main(String[] args) {
        Context polyglot = Context.create();
        Value array = polyglot.eval("js", "[1,2,42,4]");
        System.out.println(array.getArrayElement(2).asInt());
    }
}

现在这是因为GraalVM默认启用了Graal.js Javascript引擎.

如果要在库存JDK上运行它,则需要向类路径添加更多内容.

在股票JDK上运行Graal.js**

关于如何在股票JDK上运行Graal.js有这个问题:如何使用graaljs?有没有地方可以获得.jar文件/文件?.接受的答案详细说明了在哪里找到必要的jar文件以使其在Java 8上运行.

简而言之,您需要将以下jar文件添加到类路径中以使其实际运行:

graal-sdk.jar - GraalVM多语言API

truffle-api.jar - 语言实现的API.

graaljs.jar - 这是GraalVM的Javascript引擎的实现

graaljs-scriptengine.jar - 允许通过Java脚本引擎API使用Graal.js.

graaljs-launcher.jar

tregex.jar - 正则表达式库

truffle-profiler.jar - 用于松露语言实现的分析器

chromeinspector.jar - 调试器集成

发射-common.jar

您可以在下载的GraalVM发行版中找到它们,两个版本都可以正常工作.

现在没有Graal编译器,Javascript引擎的性能将不是最佳的.正如您自己提到的那样,JDK 11附带了Graal 编译器的快照(而非GraalVM,它是GraalVM项目的完整分发,包括JS enginer,LLVM bitcode解释器,节点实现,JVM等).您可以通过传递--XX:+UnlockExperimentalVMOptions --XX:+UseJVMCICompilerjava命令来启用Graal编译器 .

现在在JDK 11上运行它可能不起作用,因为JDK 11与JDK 8有很大不同,可能存在模块系统问题或缺少的东西(如jax-b),但它也可能有效.它适用于JDK 8.


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • Android系统启动过程分析一、Android平台架构首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知。可以看出整 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了如何使用Python正则表达式匹配MATLAB的函数语法,包括多行匹配和跨行签名的处理方法。同时,作者还分享了自己遇到的问题和解决方案。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • python中使用正则表达式的步骤:1.导入re模块:importre2.初始化一个Regex对象:re.compile()3.刚刚创建的 ... [详细]
author-avatar
手机用户2502885897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有