Fedora 29 では OpenJDK が 1.8 から 11 になった。
いきなり凄いバージョンアップだよなぁ、って違う!
IcedTea ベースの今までと違い Oracle のソースになったみたい。
Java 11正式版がリリース、本バージョンからOracle JDKのサポートは有償に。OpenJDKで無償の長期サポート提供は現時点で期待薄 ? Publickey
なんか色々あるようだけど。
RHEL の先行開発版である Fedora には RHEL 用のそのままが使われると思う。
サポート切れや脆弱性については後ろに RedHat がいるので何も問題ない。
それはいいとして。
jjs は 29 でも実行できるけどアップグレードされていないので es6 は使えない。
GraalVM は dnf list でも出てこない、うーん。
とりあえず Java 11 はコンパイルなしで実行できるらしいので試してみよう。
JEP 330: Launch Single-File Source-Code Programs
なんとシバンが使えるようだ。
つまり Java 言語のまま普通のスクリプトとして使える、よし早速。
#!/usr/bin/java --source 11 // -*- Mode: Java -*- public class Hoge { public static void main(String[] args) { System.out.printf("%s\n", "ほげ"); } }
動いたけど…
結論、インタプリタ実行しているのではない。
メモリ上にコンパイルしてソレを実行しているだけのようだ。
つまり javac が必要、Fedora デフォルトには入っていない。
sudo dnf install java-11-openjdk-devel
それと、シバンを使う時は拡張子を取っ払う必要がある。
Gedit で色分けできないのでモードラインを使いましょう。
*.java 拡張子をつけたまま usr/bin/java に渡すこともできる。
この時はシバンがあるとエラーになる、なんかもどかしい。
ようするに拡張子が無い場合は一行目を無視する、って感じの単純な実装みたい。
macOS ならそれでいいんだけどね。