[Java, JavaScript] Nashorn Maven: Easy Library Classpath Setup

原文はこちら。
https://blogs.oracle.com/brunoborges/entry/nashorn_maven_easy_library_classpath

NashornはJava 8に組み込まれたすばらしいテクノロジーです。このJavaScriptエンジンを使うと、開発者がJava Platform用のコードをJavaScript言語を使って開発することができます。これでどういうメリットを得られるのでしょうか。基本的にJava Platformでできることは何でもできますが、何か素敵なことをするために、Javaプロジェクトを設定、コンパイル、JARにパッケージングする必要はありません。
例えば、JDK 8のStreams APIを試したいとしましょう。よくあるJava開発では、IDEがない場合、テキストエディタを開き、Javaクラスを作成し、javacでコンパイルして最終的にjavaコマンドを使って実行する必要がありますが、単にAPIを試してみたいんですよね。だとすれば、コード作成/コンパイル/実行という手順をすっ飛ばしたいですよね。単にコードを書いて実行したいですよね。
Nashorn自体様々な方法で実行できます。Javaプログラム内からJSR 223 APIを使い、ScriptEngine APIを呼び出してNashornを使ってJavaScriptコードを評価することができます。または、jjsコマンドラインツールを使うこともできます。JDK 8をインストールしていれば、コマンドプロンプトもしくはターミナルからjjsとタイプして、Nashornコンソールで戯れましょう。.
Nashornやjjsがどういうものか理解し、Java APIプログラミングをJavaScriptで利用できることを理解されたかと思いますが、3rdパーティーのライブラリやご自身が作成されたライブラリを使うのはどうでしょうか。Nashornのjjsコマンドはパラメータ -cp でJavaのようにクラスパスを構成することができます。しかし、ライブラリは通常Mavenアーティファクトとして公開されており、依存性があります。もちろんライブラリ実行に必要なすべてのJARファイルをダウンロードすることもできますし、jar1:jar2:jar3という昔ながらのやり方で手作業でクラスパスを設定することもできます。とはいえ、イケてませんよね。そんなわけで、Mavenアーティファクトに依存するNashorn JavaScriptアプリケーションを作成する最も簡単な方法を考えてみましょう。

Introducing you the Nashorn Maven Executor

mvn.jsスクリプトは、本当に素敵な小さなNashornスクリプトで、構成ファイルから抽出されたPOM上でMavenを呼び出し、アプリケーションのすべての依存ツリーをダウンロードし、クラスパスを設定して、適切に構成した完全なクラスパスを付けて、jjsで実際のアプリケーションを呼び出します。しかも自動的に。
Nashorn Maven Executor
https://github.com/brunoborges/nashorn/tree/master/maven
それではどのように動くかご紹介しましょう。

1) まず、構成ファイル(jaxrs.mvnとします)を構成します。
var maven = {
  main: "jaxrs.js",
  options: "-scripting",
  dependencies: ["org.glassfish.jersey.core:jersey-client:2.17", 
                 "org.glassfish.jersey.connectors:jersey-grizzly-connector:2.17"]
}
2) アプリケーション(jaxrs.js)を作成します。今回はGlassFishのJerseyを使って実装されたJAX-RSクライアントAPIに依存しています。
var ClientBuilder = Packages.javax.ws.rs.client.ClientBuilder;
var client = ClientBuilder.newClient();
var target = client.target("http://ip.jsontest.com/");
var response = JSON.parse(target.request().get(java.lang.String.class));
print("Your IP address is ${response.ip}");
3) 最後に、mvn.jsを呼び出すのですが、Mavenを適切にインストールし構成済み(PATHが通っていること)であることを確認しておきましょう。JDK 8は当然のことですね。
$ jjs -scripting mvn.js -- jaxrs.mvn 
もしくは
$ ./mvn.js -- jaxrs.mvn
これで終わりです。いかがでしょうか。

(訳注)
実行結果は以下のようになりました。

Learn more about Nashorn

0 件のコメント:

コメントを投稿