0

在我自己的计算机上成功安装 jython 2.7.0 并编写了一些使用它的代码后,我尝试将它安装在运行 Ubuntu 14.04.2 LTS 的服务器上。我的java版本是:

java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

我在安装过程中的错误是:

Generating start scripts ...
Installing pip and setuptools
 90 %
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/python/util/jython : Unsupported major.minor version 51.0

有趣的是,如果我以超级用户身份运行安装,然后还以超级用户身份运行bin目录中的 jython 可执行文件,它可以工作:

jython-2.7.0/bin$ sudo ./jython 
Jython 2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11) 
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_51
Type "help", "copyright", "credits" or "license" for more information.

但是,如果我尝试以普通用户身份运行 jython 可执行文件(在以超级用户或普通用户身份安装之后),那么我会得到相同的结果UnsupportedClassVersionError

jython-2.7.0/bin$ ./jython 
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/python/util/jython : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.python.util.jython.  Program will exit.

我检查了超级用户和普通用户的java版本,它完全一样。关于这里的问题有什么想法吗?

4

1 回答 1

0

Jython 有一个包缓存,它在启动时扫描 jar 并将一些信息保存到python.cachedir. 第一次使用默认安装运行 jython 的用户会使用该用户的权限创建和初始填充 cachedir。在您的情况下,root 的 umask 可能会将权限设置为任何其他用户都无法读取 - 使 jython 类加载器认为它在读取默认 jar 时遇到问题。如果您第一次使用普通用户,您会看到尝试创建缓存目录的权限错误。

如果您不想使用注册表文件、java 属性或修改 jython 启动脚本为每个用户设置缓存目录,那么为每个人提供对缓存目录的默认 rw 权限就足够了。如果是这种情况,这样的事情应该可以解决您的问题(您可能也必须 +xcachedir/packages目录):

JYTHON_HOME=$(sudo jython -c 'import java;print java.lang.System.getProperty("python.home")')
sudo chmod a+rwx ${JYTHON_HOME}/cachedir ${JYTHON_HOME}/cachedir/packages
sudo chmod -R a+rw ${JYTHON_HOME}/cachedir
于 2015-09-28T22:57:43.863 回答