gnupack の CygWin で Java が上手いこと動かなかった
gnupackのcygwinがWindowsのpathを拾ってくれない件 - モーグルとカバとパウダーの日記
ありがとう、ありがとう。
GNUPACK_PATH = %EMACS_DIR%\bin;%INST_DIR%\app\vim;%INST_DIR%\app\script
GNUPACK_PATH = %GNUPACK_PATH%;%INST_DIR%\app\mingw\tdm\bin;%_local_%\bin;%CYGWIN_DIR%\bin
PATH = %GNUPACK_PATH%;%PATH%
上のブログのおかげで、Javaがgnupackに搭載されているバージョンで動くのでなく、
WindowsのPATHで通してあるところで動くようになりました。
何がヤバイって、gnupack の cygwin の binフォルダを見ても java.exe がないから
いったいどこを起点にJavaが動いてるのか謎すぎるし、
そのうえその搭載されているJavaがどうおかしいのかわかんないけど、
ふつうのJavaプログラムが実行できないことだったんですよね。
なんとかなって心に余裕が出来たので改めて調べてみると、原因はわかりました。
gnupack の startup_config.ini 内の
PATH = %PATH%; %windir%\system32; %windir%; %windir%\system32\Wbem
この一文、こいつが原因です。(※見やすいようにセミコロンの後ろにスペースを2つ足しました)
%windir%\system32 内に java.exe があるので、そいつが動いちゃってたんですね。コノヤロー!
というわけで、この一文の最初に#を付けてコメント化(コメントアウト)させちゃえばもう心配ないですね。
コメントアウトさせたことで、上記のブログのような記述は必要なくなりましたが、
今度は代わりに
PATH = %PATH%;C:\Java\jdk1.8.0_40\bin
の一行を書いておかないと、WindowsのPATHが書いてあってもJavaが動かないので注意と。
以下、どんなおかしなことが起こっていたのか参考に。
(原因がわかってから見れば、javac.exe は %windir%\system32 内に無いので、
PATHを通しているv1.8.0_40 でコンパイルをおこなっていて、
java.exe は %windir%\system32 内の v1.7.0_71 の方が起動するために
バージョン違いによりエラーが起こっていた、ということなのですね…)
# # cat HelloJava.java
public class HelloJava {
public static void main(String [] args){
System.out.println("Hello!! You!!") ;
System.out.println("Hey!") ;
}
}
# # java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) Client VM (build 24.71-b01, mixed mode, sharing)
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
# # javac HelloJava.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
# # java HelloJava
java.lang.UnsupportedClassVersionError: HelloJava : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
Exception in thread "main"