【Windows】java -versionの結果が期待値と異なる


java -versionの結果が期待値と異なる

まえおき

この記事 【未解決】Eclipse 4.4 でAndroidプロジェクトのビルドエラー で,結局Eclipseを再インストールしようと思ったわけですが,新しくダウンロードしたEclipseを起動しようとすると

Version 1.6.0_45 of the JVM is not suitable for this product. Version: 1.7 or greater is required.

と表示されて起動できませんでした.
この意味はそのまま起動には1.7以上のJavaが必要だと言われてるわけですが…

環境変数にはJava1.8が指定されている

もともと1.6なんて指定してたっけかなぁと思って環境変数を覗いていましたが,JAVA_HOMEもPathもJava 1.8が指定されていました.

Javaのインストール先はどちらも C:\Program Files\Java\jdk1.*

java -versionの結果

しかし, java -version の結果は無情にも

java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

ぐぬぬ...

javaの場所を探る

なんということでしょう!Windowsにはwhichコマンドがありません.omg.

仕方ないので,こちらの記事を参考に witch コマンドを作ります.
whichコマンドを作る:@IT

which.bat
@echo off
for %%I in (%1 %1.com %1.exe %1.bat %1.cmd %1.vbs %1.js %1.wsf) do if exist %%~$path:I echo %%~$path:I

witch java の実行

C:\Users\user>which java
C:\Windows\System32\java.exe

!?

なんか全然想像していなかったパスが表示されました.

これに関する記事を見つけました

java.exe の実行パスに環境変数 PATH の設定が反映されない(Windows)

java.exe は C:\Windows\System32 にもインストールされる。

おぅ…

したがって、下のように PATH の設定で %SystemRoot%\system32
%JAVA_HOME%\bin よりも先に位置している場合、優先されるのは前者であるから、%SystemRoot%\system32\java.exe が実行される。

なるほどね.

つまり,Java実行ファイルまでのパスを通す際に, C:\Windows\system32; よりも前に C:\Program Files\Java\jdk1.8.0_05\bin; を記述しないといけないわけです.

結果

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

何という罠