Scala REPL仅以root用户身份运行,以非root身份运行时出错

时间:2012-07-07 00:22:54

标签: java scala

我正在运行64位OpenSUSE 12.1,今天我从官方网站下载了最新的Scala 2.9.2,在解压缩tgz并转到scala-2.9.2 / bin目录后,我执行了“scala”并得到了此错误消息:

[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报告在热点JVM 1.7中运行,发生同样的错误。
  2. 安装sbt并从sbt运行“console”,发生同样的错误。
  3. 以普通用户的形式在sudo scala和scala之间进行strace和diff输出,除了上面的错误信息之外没有区别。
  4. scala -Ylog-classpath为su和普通用户,然后对输出进行diff,与上面相同。
  5. 已禁用AppArmor并再次尝试,同样的错误消息。
  6. 下载其他scala版本(所有2.9x和2.10里程碑4),他们的所有REPL都会给出相同的错误消息。
  7. 确保在scala REPL运行之前fsc未运行
  8. 确保主机名可解析
  9. 这是一个非常有趣的问题,如果我能幸运地找到它,我肯定会发布一个解决方案。

    非常感谢你的帮助!

    上次修改: 感谢大家和reddit(http://www.reddit.com/r/scala/comments/w5s0m/please_help_scala_only_runs_as_root_user_gives/),他们提供了非常宝贵的建议,帮助我找出这个非常奇怪的问题。请参阅下面的答案以获得解决方案。

4 个答案:

答案 0 :(得分:1)

不要将sbt-launch.jar放在$ SCALA_HOME / lib目录,项目的lib目录中,或放在类路径上的任何位置。

答案 1 :(得分: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

答案 2 :(得分:0)

看起来它无法打开`scala-library.jar',或者REPL所需的其他jar文件之一。

你没有说scalac是否有效。这可能会给人一种线索。

无论如何,我确保所有jar文件都是+ r,它们所在的目录以及所有其他父目录都是+ rx。

答案 3 :(得分:0)

这很可能是由包含不可读的jar的jdk-xxx / jre / lib / ext引起的。请查找以“。” jar和“。 _jar”开头的文件并将其删除。