【发布时间】:2012-07-07 00:22:53
【问题描述】:
我运行的是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。
请提出您的意见,谢谢!
我做了以下尝试来解决这个问题:
- 安装Oracle JDK 1.7并运行scala,确认scala REPL报告在hotspot JVM 1.7中运行,出现同样的错误。
- 安装了 sbt 并从 sbt 运行“控制台”,出现同样的错误。
- strace 和 diff sudo scala 和 scala 之间的输出作为普通用户,除了上面的错误消息之外没有任何区别。
- scala -Ylog-classpath 作为 su 和普通用户,然后 diff 输出,同上。
- 禁用 AppArmor 并重试,同样的错误消息。
- 下载其他 scala 版本(所有 2.9x 和 2.10 里程碑 4),它们的所有 REPL 都会给出相同的错误消息。
- 确保在 scala REPL 运行之前 fsc 没有运行
- 确保主机名可解析
嗯,这是一个非常有趣的问题,如果我有幸找到它,我一定会发布解决方案。
非常感谢您的帮助!
上次编辑: 感谢这里和 reddit (http://www.reddit.com/r/scala/cmets/w5s0m/please_help_scala_only_runs_as_root_user_gives/) 上的所有人,他们提供了非常有价值的建议来帮助我解决这个非常奇怪的问题。请参阅下面的答案以获取解决方案。
【问题讨论】:
-
scala 二进制文件世界和可执行文件吗?
-
是的。所有 dirs 和 scala 可执行文件为 755,所有其他文件为 644
-
你的机器上是否启用了 SELinux?
-
no.. SUSE 中有一个 AppArmor,不幸的是,禁用 AppArmor 并没有改善这种情况。