私はJavaScriptを実行する必要があるJavaアプリケーションを開発しています。Nashorn JSエンジンは廃止を取得しようとしているとの交換はGraalVMを利用しグラールSDKが提供するAPIのセットです。基本的な言語の数を実行する仮想マシン。
少なくとも、それは私が考えるものです。だから私はそれが働いて取得しようとして一日を過ごしました。私は、JDK 8 I使用のIntelliJ IDEAを使用していますGraalVMのRC6をダウンロードし、私は新しいJDKとしてGraalVMを追加しました。私は、私は開発キットとして仮想マシンを追加することになっています、それは奇妙なことがわかったが、私はそれでOKだったので、それはJDK 8に基づいています知っていました。
そして、問題は他の人とは違って、私は仕事に新しいパッケージを得ることができませんでした。私のIDEは、それらを解決することはできません私に言いました。
実際には、org.graalvmパッケージのどれも解決することはできませんでした。
私の知る限りではJDK 11は、ビルド20以降GraalVMが付属しているのでJDK 11ビルド28をダウンロードし、私はそう。
実際に、この場合には、パッケージの一部が見つかりませんでしたが、はるかに予想より:例えばorg.graalvm.polyglotはまだ解決できませんでした。
最後に、私はMavenのからグラールSDKを追加しようとしたパッケージが解決されました。実行しているときに今、私は例外を取得します:
Context ctx = Context.create(“js”);
いいえ言語およびポリグロット実装がクラスパスに見つかりませんでした。トリュフ-api.jarのがクラスパス上にあることを確認してください。
私は最初の2例における問題は、実際にGraalVM JDKを取得していなかったと思ったが、それは例外であっても、この方法をスローします。
缶誰かが問題を説明経験しましたか?
GraalVM
GraalVM現在プログラミングlanaugesの数をサポートする高性能な埋め込みポリグロット仮想マシンである:LLVMバックエンドでJava(およびJVM言語)は、JavaScript(Node.jsのを含む)、ルビー、R、PythonおよびC / C ++やその他の言語。
:あなたはここにGraalVMの事前に構築されたディストリビューションダウンロードすることができhttps://www.graalvm.org/downloadsを。とりわけ、それは、Java Runtime、ノードの実行時、Graal.jsと呼ばれるJavaScriptエンジンなどが含ま
グラールSDKは GraalVMは、それが実行可能なすべての言語の実装で動作することができポリグロットのAPIです。このポリグロットの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配布ポイントに設定されています。
<dependency>
<groupId>org.graalvm</groupId>
<artifactId>graal-sdk</artifactId>
<version>1.0.0-rc</version>
<scope>system</scope>
<systemPath>${java.home}/lib/boot/graal-sdk.jar</systemPath>
</dependency>
あなたが実行されたときに今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ファイル/ファイルを入手するための場所はありますか?。受け入れ答えは、それは、Java 8で動作させるために必要なjarファイルを見つけるために、より詳細に伝えます。
一言で言えば、あなたはそれを実際に実行するためにクラスパスに次のjarファイルを追加する必要があります。
- グラール- sdk.jar - GraalVMポリグロットAPI
- トリュフ-api.jarの - 言語の実装のためのAPI。
- graaljs.jar -これはGraalVMのJavaScriptエンジンの実装です
- graaljs-scriptengine.jarは - JavaのスクリプトエンジンのAPIを通じてGraal.jsを使用することができます。
- graaljs-launcher.jar
- tregex.jar - 正規表現ライブラリ
- トリュフ-profiler.jar - トリュフ言語の実装のためのプロファイラ
- chromeinspector.jar - デバッガの統合
- ランチャー-common.jarを
あなたがいることをGraalVM分布でそれらを見つけることができますダウンロードし、両方のエディション罰金を動作します。
今グラールコンパイラせずにJavaScriptエンジンのパフォーマンスが最適ではないでしょう。あなた自身を述べたようにJDK 11は、グラールのスナップショットが付属していますコンパイラ(JSのenginer、LLVMのビットコードインタプリタ、ノードの実装、JVMなどを含むGraalVMプロジェクトの完全distribtuionでないGraalVM、)。あなたは渡すことによってグラールコンパイラを有効にすることができます--XX:+UnlockExperimentalVMOptions --XX:+UseJVMCICompiler
するjava
コマンド。
今JDK 11の上にすべてを実行しているのかもしれない JDK 11は、JDK 8から十分に異なっているためではない仕事をして、そこモジュールシステムとの問題や(JAX-Bのような)欠落しているものかもしれないが、それもうまくいくかもしれません。これは、JDK 8で動作します。