LoginSignup
2

More than 3 years have passed since last update.

posted at

プロジェクト毎にJVMを切り替えるには

起動時、コンパイル時にJDK,JVMを切り替えたい

Javaの勉強をしているとプロジェクトによって別のバージョンを使いたい時がある。例えば私は最新のjava10以降のvar型推論が好きだけど、業務ではjava8しか使えない。常駐先によってはjava4のところも
あった。
あえて古い環境で勉強しないといけない事もあるわけです。
というより2020年現在、業務でjava10なんてまず使えない・・
eclipseとかだとjvmの指定する画面があるけど、実際コマンドラインではどうやって指定するのだろうか、という実験です。

java -version でどこのJVMを読み込んでいるか確認する

java12でコンパイル済みのMain classがあり、
環境変数JAVAHOME には java12のJVMへのパスが設定されているとする。
その状態で任意のディレクトリにjava8のJVMのJVMを配置し、その中のjavaコマンドがあるディレクトリに入って

bash
java -version 

コマンドを叩く。
すると

java version "12.0.1" 2019-04-16

と表示された。つまりカレントディレクトリであっても環境設定JAVAHOMEのクラスパスを通したJVMが動いていることになる。

そこで、

bash
./java -version 

と明示的にカレントディレクトリのjavaコマンドを指定してみた。すると、

java version "1.8.0_144"

とカレントディレクトリのJVMが起動した。
ということはjavaコマンドをフルパスか相対パスにすればJVMをどこに配置してもパスを通せるのでは?

ということで、プロジェクトルートの直下にJVMを置いた状態でプロジェクトルートで以下のコマンドを打ってみた

bash
./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では動かせないと言われている。つまり切り替え成功です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2