我在 Windows 中从 mingw git bash shell 执行 jruby 时遇到问题。我下载了 jruby 1.6.2 的 windows 安装程序并运行它没有问题。如果我打开一个新的 Windows cmd shell,它似乎工作正常。我安装了 rake 和 sinatra gems;用了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 shell 并尝试对 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 的 shell 脚本。
问题是,虽然 msys 可以将 POSIX 转换为 Win 路径,但脚本会自行构建字符串,以便将类路径和其他信息传递给 jar。
看来这就是事情变得一团糟的地方。出于同样的原因,这些脚本特别具有处理 cygwin 的代码分支。我试图强制脚本认为它在 cygwin 下运行,但不幸的是脚本使用“cygpath”程序来获取路径,而这在 msys 中不可用