Javaで実行可能な単一ファイルソースコードを書く方法

JDK 11 以降、Java はクラス ファイルにコンパイルする必要なくソース ファイルを直接実行することをサポートしています。これにより、Python、Ruby、Node.js などの動的プログラミング言語で通常行われるように、Java でスクリプトを記述することが可能になります。この投稿は、それを実現する方法の例とクイック リファレンスとして役立ちます。

手順は簡単にまとめると次のようになります。

  • シェバンが次のように設定されていることを確認してください: #!/usr/bin/env java --source 17--source が重要であることに注意してください

  • ソースコードファイルの最初のトップレベルクラスに実行入口として psvm メソッドが含まれていることを確認します。

  • ファイル名に .java 拡張子が付いていないこと、および chmod +x ./filename でファイルが実行可能であることを確認します。

  • 以下をfibという名前のファイルとして保存し、実行可能にします
#!/usr/bin/env java --source 17

public class Fib {

  public static void main(String[] args) {
    long num = Long.parseLong(args[0]);
    System.out.println(fib(num));
  }

  private static long fib(long n) {
    if (n < 2) return n;

    return fib(n - 2) + fib(n - 1);
  }
}
  • コマンドラインから試す
~$ ./fib 10
55

注記

  • また、java filename.java のように、シェバン行 #!/usr/bin/env java --source 17 を設定せずに実行することもできます。この場合、ファイルを実行可能に設定する必要はなく、ファイル名はソース コード ファイルの最初のトップレベル クラス名と一致する必要はありません (通常の Java コードのように)。ただし、.java ファイル拡張子は必要です。

  • 単一ファイルの実行可能ファイルが JDK 外部の外部依存関係を使用する場合は、java -cp /path/to/3rd-party.jar filename.java のように通常の -cp パラメータを使用して渡すことができます。

参考文献

java