Java Scala REPL仅以root用户身份运行,以非root用户身份运行时出错
我运行的是64位OpenSUSE 12.1,今天我从官网下载了最新的Scala 2.9.2,在解包tgz并转到Scala-2.9.2/bin目录后,我执行了“Scala”,并收到以下错误消息:Java Scala REPL仅以root用户身份运行,以非root用户身份运行时出错,java,scala,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
[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.
[init]错误:加载时出错,打开zip文件时出错
未能初始化编译器:找不到对象scala。
**请注意,从2.8开始,scala不假定使用java类路径。
**对于旧的行为,将-usejavacp传递给scala,或者如果使用设置
**对象编程设置为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/)他提出了非常有价值的建议来帮助我解决这个非常奇怪的问题。有关解决方案,请参见下面的答案。不要将sbt-launch.jar放在$SCALA_HOME/lib目录、项目的lib目录或它将放在类路径上的任何位置。看起来它无法打开`SCALA library.jar',或REPL所需的其他jar文件 您没有说scalac是否有效。这可能会提供线索
无论如何,我会确保所有jar文件都是a+r,它们所在的目录以及所有其他父目录都是a+rx。我刚刚找到了原因: 作为普通用户,仔细检查“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错误:
这很可能是由于jdk xxx/jre/lib/ext包含不可读的jar造成的。请查找以“.”jar和“.\u jar”开头的文件并将其删除。scala二进制文件世界和可执行文件是吗?是的。755适用于所有DIR和scala可执行文件,644适用于所有其他文件您的设备上是否启用了SELinux?否。。SUSE中有一个AppArmor,禁用AppArmor并不能很遗憾地改善这种情况。谢谢,但是lib目录中没有sbt-launch.jar。jar不在官方网站的scala发行版中。类似这样的问题是我的问题,因为我在IntelliJ中打开了多个模块,每个模块都有不同的依赖项,它们相互冲突。谢谢。在我的其他尝试之后,这似乎毕竟不是一个权限问题,因为即使从OpenSUSE的java repo安装scala也不能解决问题,并且将scala dir中的所有内容设置为777也没有帮助。。。strace-f不显示文件系统读取失败或权限拒绝。。。也许opensuse不喜欢scala@HowardGuo你没有说scalac是否有同样的问题。@HowardGuo试试fsc。fsc使用后台守护进程,通过TCP端口与前台编译器对话,因此如果由于某种原因无法打开侦听端口,它可能会失败。这可能是因为您的
hostname
未解析为有效的可绑定IP,或对可绑定端口的某些SELinux限制。我认为REPL可能会使用类似的用法。:(仍然不起作用,我想scala只是不喜欢suse