JDK11 ea18から、javacしないでもJavaファイルを実行できるようになりました。
あと、Windowsバイナリはzipファイルで提供されるようになっています。tarコマンドが提供されたとはいえ、エクスプローラーから解凍できるzipファイルになるのは ありがたい。
JDK 11 Early-Access Builds
JEP330が取り込まれたことにより、ソースファイルがひとつのJavaプログラムは、javac不要でjavaコマンドで実行できるようになります。
JEP 330: Launch Single-File Source-Code Programs
C:\Users\naoki\java>more Hello.java public class Main { public static void main(String... args) { System.out.println("Hello!!"); } } C:\Users\naoki\java>jdk-11-ea18\bin\java Hello.java Hello!!
これはインタプリタのように逐次ソースコードを読みながら実行するというわけではなく、内部的には、次のようにメモリに出力してコンパイルが行われ、そのメモリ内容を実行するような処理になっています。
javac -d <memory> Hello.java java -cp <memory> Main
ここで注目してもらいたいのは、ファイル名とクラス名が一致していないところです。
ただし、すでにクラスパス上にコンパイル済みclassファイルがある場合はエラーになります。
C:\Users\naoki\java>jdk-11-ea18\bin\java Hello.java error: class found on application class path: Main
拡張子javaを付けない場合でも、--source指定をすれば直接実行ができます。
C:\Users\naoki\java>more hello public class Main { public static void main(String... args) { System.out.println("Hello!!"); } } C:\Users\naoki\java>jdk-11-ea18\bin\java --source 11 hello Hello!!
これを利用すると、ShebangとしてJavaファイルをコマンドのように実行することもできます。Cygwinですが、次のようになりました。
naoki@DESKTOP-P96N9VS ~$ cat hello #! /cygdrive/c/Users/naoki/java/jdk-11-ea18/bin/java --source 11 public class Main { public static void main(String... args) { System.out.println("Hello!!"); } } naoki@DESKTOP-P96N9VS ~$ ls hello -l -rwxr-xr-x 1 naoki naoki 171 6月 17 17:50 hello naoki@DESKTOP-P96N9VS ~$ ./hello Hello!!
Javaを少し気軽に実行できるようになりますね。入門には とてもいいと思います。