Windows で mingw git bash シェルから jruby を実行する際に問題が発生しています。jruby 1.6.2 の Windows インストーラーをダウンロードし、問題なく実行しました。新しい Windows コマンド シェルを開くと、正常に動作するようです。レーキとシナトラの宝石をインストールしました。irbを使用しました。jruby -v と入力すると、次のようになります。
jruby 1.6.2 (ruby-1.8.7-p330) (2011-05-23 e2ea975) (Java HotSpot(TM) Client VM 1.6.0_24) [Windows 7-x86-java]
ただし、git mingw bash シェルを開いて jruby で何かをしようとすると、次のエラーが発生します。
Exception in thread "main" java.lang.NoClassDefFoundError: org/jruby/Main
Caused by: java.lang.ClassNotFoundException: org.jruby.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.jruby.Main. Program will exit.
jruby lib ディレクトリがクラスパスにあることを確認しました。
他のアイデアはありますか?
更新: 問題は、シェル スクリプトが最終的に jruby bin ディレクトリの jar を呼び出すことだと思います。
問題は、msys がほとんどの場合に POSIX を Win パスに変換できる一方で、スクリプトがクラスパスやその他の情報を jar に渡すために独自に文字列を作成することです。
これが物事がめちゃくちゃになっているところのようです。スクリプトには、これと同じ理由で cygwin を扱うコードのブランチがあります。スクリプトが cygwin で実行されていると思わせるように強制しようとしましたが、残念ながら、スクリプトは「cygpath」プログラムを使用してパスを取得しており、msys では使用できません。