1

64 ビットの OpenSUSE 12.1 を実行しています。今日、公式 Web サイトから最新の Scala 2.9.2 をダウンロードしました。 :

[init] error: error while loading <root>, error in opening zip file

Failed to initialize compiler: object scala not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.

scala -usejavacp を実行しようとしましたが、役に立ちません。私は他の多くのディストリビューションで Scala を頻繁に使用してきましたが、これまでこのエラーが発生したことはありません。

私の OpenSUSE インストールには、OpenJDK 6 がインストールされています。

あなたの意見を提案してください、ありがとう!

問題を解決するために、次の試みを行いました。

  1. Oracle JDK 1.7 をインストールして scala を実行し、scala REPL が hotspot JVM 1.7 で実行されていることを報告し、同じエラーが発生することを確認しました。
  2. sbt をインストールし、sbt から "console" を実行すると、同じエラーが発生します。
  3. 通常のユーザーとして sudo scala と scala の間の出力を strace および diff します。上記のエラー メッセージ以外に違いはありません。
  4. su および通常のユーザーとして scala -Ylog-classpath を実行し、上記と同じように出力を比較します。
  5. AppArmor を無効にして再試行しましたが、同じエラー メッセージが表示されました。
  6. 他の scala バージョン (すべての 2.9x および 2.10 マイルストーン 4) をダウンロードすると、すべての REPL で同じエラー メッセージが表示されます。
  7. scala REPL が実行される前に fsc が実行されていないことを確認しました
  8. ホスト名が解決可能であることを確認しました

これは非常に興味深い問題です。幸運にも解決策を見つけることができれば、必ず解決策を投稿します。

助けてくれてどうもありがとう!

最終編集: ここと reddit (http://www.reddit.com/r/scala/comments/w5s0m/please_help_scala_only_runs_as_root_user_gives/) で、この非常に奇妙な問題を理解するのに役立つ非常に貴重な提案を提供してくれた皆さんに感謝します。解決策については、以下の私の回答を参照してください。

4

4 に答える 4

1

私はちょうど理由を見つけました:

通常のユーザーとして「strace -f scala」の出力を詳しく調べると、興味深い出力が得られます。

[pid 11919] open("/usr/lib64/jvm/java-1.6.0-openjdk-1.6.0/jre/lib/ext/gnome-java-bridge.jar", O_RDONLY) = -1 EACCES (Permission denied)

その後すぐに、scala REPL の初期化に失敗したことをユーザーに通知するシステム コールが続きます。

[pid 11919] write(1, "\nFailed to initialize compiler: "..., 260

gnome-java-bridge.jar のパーミッションは 400 ですが、444 に変更すると問題は解決しました!

パーミッションの問題は、OpenSUSE のバグとしてリストされているようです: http://lists.opensuse.org/opensuse-bugs/2012-07/msg00920.html

于 2012-07-10T12:12:28.660 に答える
1

sbt-launch.jar を $SCALA_HOME/lib ディレクトリ、プロジェクトの lib ディレクトリ、またはクラスパスに配置される場所に配置しないでください。

于 2012-07-07T01:45:08.637 に答える
0

「scala-library.jar」または REPL に必要な他の jar ファイルの 1 つを開くことができないようです。

あなたは scalac が機能するかどうかを言いませんでした。それは手がかりを与えるかもしれません。

いずれにせよ、すべての jar ファイルが a+r であり、それらが含まれるディレクトリと他のすべての親ディレクトリが a+rx であることを確認します。

于 2012-07-08T01:59:09.937 に答える