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 を作成し、最初にデータを取り込みます。あなたの場合、ルートの umask はおそらく、他のユーザーが読み取れないようにアクセス許可を設定し、jython クラスローダーにデフォルトの jar の読み取りに問題があると考えさせます。初めて通常のユーザーを使用した場合は、キャッシュディレクトリを作成しようとしてアクセス許可エラーが表示されます。

レジストリ ファイルや Java プロパティを使用したり、jython 起動スクリプトを変更したりして、各ユーザーにキャッシュ ディレクトリを設定したくない場合は、すべてのユーザーにキャッシュ ディレクトリへのデフォルトの rw アクセス許可を与えるだけで十分です。その場合は、次のような方法で問題を解決する必要があります (cachedir/packagesディレクトリも +x する必要がある場合があります)。

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 に答える