Javaのバージョンをコマンドで簡単に切り替える(Mac限定)
最近java9でいろいろイジりながらも、職場はまだ8だったり、java系のツールでjava9で動かないこともあり簡単に切り替える方法ないかと模索していて、個人的な着地点を見つけれたのでメモ。
環境
コマンド
export JAVA_HOME=`/usr/libexec/java_home -X | python -c 'import sys, plistlib; plist = plistlib.readPlist(sys.stdin); print "\n".join(str(dict["JVMVersion"]) for dict in plist)' | peco | xargs /usr/libexec/java_home -v`
PlistBuddy
で出来るかと思ったんですが引数に渡せるのがファイルパスのみで、一時ファイルを作成する必要があったため、plist文字列を直接読み込めるようにPythonで書いてます。
※ Pythonが分からなさすぎる。。もう少し効率的な書き方があればご教授ください。
zshの設定ファイルに以下Function
を定義(よくjmc
コマンドと誤爆する)
jvc() { export JAVA_HOME=`/usr/libexec/java_home -X | python -c 'import sys, plistlib; plist = plistlib.readPlist(sys.stdin); print "\n".join(str(dict["JVMVersion"]) for dict in plist)' | peco --prompt "Switch Java Version >" | xargs /usr/libexec/java_home -v` }
Javaでテスト用の空きポートを取得する(TCP)
数行で書けたのでメモ。
(今回の書き方は取得してすぐに解放しているので、実際に取得ポートを取得するまでの僅かな間に、参照できなくなる可能性もあります。)
public static int getFreePort() { return IntStream.range(1025, 65535) .filter(i -> { try (ServerSocket socket = new ServerSocket(i, 1, InetAddress.getByName("localhost"))) { return true; } catch (IOException e) { return false; } }) .findFirst().orElseThrow(IllegalStateException::new); }
UDPは DatagramSocket
を使えばいける模様。