ダウンロード サンプルファイル (1.7 KB)
JShellをもっと便利にするツール
JShellはツールとしての利用だけではなく、jdk.jshellというパッケージ名でAPIとしても提供されています。
今回はこれらのAPIの利用方法を紹介しませんが、APIを使ってJShellを拡張したプロジェクトがGitHubにありました。ここではそれらを紹介します。
これらのプロジェクトをそのまま使っても便利ですが、自分でJShellを拡張したい場合にも、大変参考になるプロジェクトだと思います。
Apache Mavenのアーティファクト情報でライブラリを追加できるJShell拡張
コードのビルドでApache Maven(以下、Maven)やGradleを使うことに慣れてしまうと、必要なライブラリをダウンロードしてjarファイルを配置すること自体が面倒になるケースがあります。
また、最近のプロジェクトでは、 MavenやGradle以外の方法ではビルド済みのjarファイルをどうやってダウンロードすればいいのかわからないプロジェクトも増えています。
「Try artifact」は、Mavenが使っているアーティファクト情報を利用し、必要なライブラリをコマンドから追加できるため、こうした問題を簡単に解決できます。
実際にMySQLのJDBCドライバを取得し、取得したコードを使う実行例がリスト13です。
java -jar try-artifact-0.2.1.jar | Welcome to JShell -- Version (version info not available) | Type /help for help -> /resolve mysql:mysql-connector-java:jar:5.1.6 // (1) | Path /Users/musvia/.m2/repository/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar added to classpath -> Iterator<java.sql.Driver> i = ServiceLoader.load(java.sql.Driver.class).iterator(); // (2) | Added variable i of type Iterator<java.sql.Driver> with initial value java.util.ServiceLoader$3@3159c4b8 -> i.next(); | Expression value is: com.mysql.jdbc.Driver@3b084709 | assigned to temporary variable $2 of type java.sql.Driver
(1)ではMySQLのJDBCドライバのアーティファクト情報を指定しています。追加したいライブラリを取得する指定方法が不明の場合、Maven Repositoryなどから調べることができます。そして、(2)のように追加したライブラリをインポートすることなく、すぐに利用することができます。
JavaFXのコードを簡単に確認できるようにするJShell拡張
JavaFXでのコードをJShellで確認したい場合、そのままではjava.lang.ExceptionInInitializerErrorエラーが発生してしまい実行ができません。
この問題を解決し、簡単にJavaFXのコードを確認できるようしたJShellが「JavaFXSupportsForJShell」です。
こちらのプロジェクトはコンパイル済みjarファイルを公開していないため、自分でソースを取得してビルドする必要があります。
実際に確認するにはリスト14のように空のJavaFXのウィンドウを作成し、そこに自分で確認したいGUI操作を記述します。そのため、GUIコンポーネントなどの動作を比較的容易に確認できます。
また同様の手法で、自分で作成したJavaFXアプリをJShellを通じて簡単に確認できるのではないかと思います。
VBox root = new VBox(10);
Scene scene = new Scene(root,640,480);
Stage stage = new Stage();
stage.setWidth(640);
stage.setHeight(480);
stage.setTitle("JavaFx JShell")
stage.setScene(scene);
stage.show();
// ここからJShell上で実際に確認をする
// Button b = new Button("test");
// root.getChildren().add(b);
// import javafx.scene.control.Alert.AlertType;
// b.setOnAction(s -> {
// Alert al = new Alert(AlertType.INFORMATION);
// al.show();
// });
このスクリプトを実行した結果が図2です。UIコンポーネントの見た目などを確認したい場合には便利なツールといえるでしょう。
最後に
今回はJShellを紹介しました。既存のJavaの開発者にとって、JShellは必ずしも満足できるものではないかもしれません。しかし、初心者にとってはJavaの学習コストが下がるなどのメリットがあるでしょう。また、JShellは拡張することもできるため、利用したいプロジェクトに即したカスタマイズをすることが可能です。
次回からはReactive Streamsなど、Java 9におけるAPIの変更点を中心に紹介します。
参考資料
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Java 9で「変わること」と、Javaのこれまで連載記事一覧
- この記事の著者
-
WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)
< WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
