我正在运行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.
请提出您的意见,谢谢!
我已经做了以下尝试来解决这个问题:
这是一个非常有趣的问题,如果我能幸运地找到它,我肯定会发布一个解决方案。
非常感谢你的帮助!
上次修改: 感谢大家和reddit(http://www.reddit.com/r/scala/comments/w5s0m/please_help_scala_only_runs_as_root_user_gives/),他们提供了非常宝贵的建议,帮助我找出这个非常奇怪的问题。请参阅下面的答案以获得解决方案。
答案 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”开头的文件并将其删除。