jshellコマンドを使って.javaファイル無しでJavaプログラムを実行する

環境

$ jshell -version
jshell 17

本題

小ネタ。

jshellコマンドは標準入力からソースコードを流し込めるので、シェルのヒアドキュメントを使うことでソースコードのファイルを作らずにJavaプログラムを実行できる。

例えば「CIのときにあらかじめcreate databaseしておきたい!けどpsqlコマンドを使うためだけにapt-get install postgresqlするのもなんかやだ!!手元にJDBCドライバはある!!!」みたいなレアな状況で役に立つ。

$ jshell -s --class-path ~/local/lib/postgresql-42.3.1.jar <<EOS
import java.sql.DriverManager;
try (var c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/", "postgres", "postgres");
    var s = c.createStatement()) {
    s.execute("create database testdb");
}
EOS

CI以外でも、ちょっとしたJavaプログラムをシェルスクリプト内で実行したいときなどに使えるはず。