起動時、コンパイル時にJDK,JVMを切り替えたい
Javaの勉強をしているとプロジェクトによって別のバージョンを使いたい時がある。例えば私は最新のjava10以降のvar型推論が好きだけど、業務ではjava8しか使えない。常駐先によってはjava4のところも
あった。
あえて古い環境で勉強しないといけない事もあるわけです。
というより2020年現在、業務でjava10なんてまず使えない・・
eclipseとかだとjvmの指定する画面があるけど、実際コマンドラインではどうやって指定するのだろうか、という実験です。
java -version でどこのJVMを読み込んでいるか確認する
java12でコンパイル済みのMain classがあり、
環境変数JAVAHOME には java12のJVMへのパスが設定されているとする。
その状態で任意のディレクトリにjava8のJVMのJVMを配置し、その中のjavaコマンドがあるディレクトリに入って
java -version
コマンドを叩く。
すると
java version "12.0.1" 2019-04-16
と表示された。つまりカレントディレクトリであっても環境設定JAVAHOMEのクラスパスを通したJVMが動いていることになる。
そこで、
./java -version
と明示的にカレントディレクトリのjavaコマンドを指定してみた。すると、
java version "1.8.0_144"
とカレントディレクトリのJVMが起動した。
ということはjavaコマンドをフルパスか相対パスにすればJVMをどこに配置してもパスを通せるのでは?
ということで、プロジェクトルートの直下にJVMを置いた状態でプロジェクトルートで以下のコマンドを打ってみた
./jdk1.8.0_144.jdk/Contents/Home/bin/java -cp ./bin Main
すると
Exception in thread "main" java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime
こんなエラーが出た。このMainクラスはjava12でビルドされているのでjava8では動かせないと言われている。つまり切り替え成功です。