MSYS下的Jython 2.7 beta 1

时间:2013-12-25 04:24:31

标签: shell mingw jython msys

我在Windows上安装了jython 2.7 beta 1并将其JYTHON_HOME/bin/jython shell脚本复制到$PATH - MSYS的可见位置,但是调用了

$ jython

不起作用,出现此错误:

java.lang.NoClassDefFoundError: org/python/util/jython
Caused by: java.lang.ClassNotFoundException: org.python.util.jython
        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)
Could not find the main class: org.python.util.jython.  Program will exit.
Exception in thread "main" 

看一下这个jython shell脚本(我重命名为jython.sh),我发现它需要Cygwin或Darwin。

在文件的开头我添加了

export JAVA_HOME='/c/Programs/JavaRE/6u31'
export JYTHON_HOME='/c/Programs/jython2_7b1'

然后它说了

case "`uname`" in
  CYGWIN*) cygwin=true;;
  Darwin) darwin=true;;
esac

我替换为

case "`uname`" in
  CYGWIN*) cygwin=true;;
  MINGW*) cygwin=true;;
  Darwin) darwin=true;;
esac

但它仍然不起作用,用:

$ jython.sh test.j.py
/c/Programs/Path/jython.sh: line 265: /cygdrive/c/Programs/JavaRE/6u31/bin/java: No such file or directory

jython.sh脚本内部使用cygpath,但MSYS没有,所以它会回到Cygwin上,导致上述错误。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

解决方案是从这里获取MSYS自己的cygpath版本:http://sourceforge.net/projects/cbadvanced/files/Msys%20Specific/cygpath-enhanced.7z/download

并将其放入MSYS的/bin

然后运行这样的脚本,工作:

$ jython.sh test.j.py

此处有关于MSYS的cygpath.exe的更多讨论,包括为什么不需要http://mingw.5.n7.nabble.com/enhanced-version-of-cygpath-td28556.html

(公平地说,如果它包含在MSYS中,那么项目将开始依赖它,这不一定是最好的想法。)

感谢指针的回答:https://stackoverflow.com/a/18488099/1143274