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
@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)
何という罠