LoginSignup
2
2

More than 3 years have passed since last update.

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

Posted at

起動時、コンパイル時に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では動かせないと言われている。つまり切り替え成功です。

2
2
0

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
  3. You can use dark theme
What you can do with signing up
2
2