Scala REPL solo se ejecuta como usuario root, da error cuando se ejecuta como no root

Estoy ejecutando OpenSUSE 12.1 de 64 bits, hoy descargué el último Scala 2.9.2 del sitio web oficial, después de desempacar el tgz e ir al directorio scala-2.9.2 / bin, ejecuté "scala" y recibí este mensaje de error :

[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.

Intenté ejecutar scala -usejavacp pero no ayuda. He estado usando Scala mucho en muchas otras distribuciones y nunca he tenido este error antes.

Mi instalación de OpenSUSE tiene instalado OpenJDK 6.

Por favor sugiera sus opiniones, gracias!

He hecho los siguientes intentos para resolver el problema:

  1. Instale Oracle JDK 1.7 y ejecute scala, confirmó que scala REPL informa que se ejecuta en el punto de acceso JVM 1.7, se produce el mismo error.
  2. Instaló sbt y ejecutó "console" desde sbt, se produce el mismo error.
  3. strace y diferencie la salida entre sudo scala y scala como usuario normal, no hay diferencia, excepto el mensaje de error anterior.
  4. scala -Ylog-classpath como su y usuario normal, luego diferencie la salida, igual que arriba.
  5. deshabilitó AppArmor e intentó nuevamente, el mismo mensaje de error.
  6. Descargue otras versiones de scala (todas de 2.9x y 2.10 hito 4), todas sus REPL dan el mismo mensaje de error.
  7. Se aseguró de que fsc no se esté ejecutando antes de que se ejecute scala REPL
  8. Se aseguró de que el nombre de host sea resoluble

bueno, este es un problema realmente interesante, definitivamente publicaré una solución si por suerte puedo encontrarla.

¡Muchas gracias por tu ayuda!

Última edición: Gracias a todos aquí y en reddit (http://www.reddit.com/r/scala/comments/w5s0m/please_help_scala_only_runs_as_root_user_gives/) que me ofrecieron sugerencias muy valiosas para ayudarme a resolver este problema tan extraño. Vea mi respuesta a continuación para la solución.

Respuesta 1

No coloque sbt-launch.jar en su directorio $ SCALA_HOME / lib, el directorio lib de su proyecto ni en ningún otro lugar donde se coloque en un classpath.

Respuesta: 2

Acabo de descubrir la razón:

Un examen más detallado de la salida de "strace -f scala" como usuario normal produce una salida interesante:

[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)

Pronto siga eso, es la llamada del sistema para informar al usuario que scala REPL no pudo inicializarse:

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

El gnome-java-bridge.jar tiene permiso 400, lo cambié a 444 y el problema está resuelto.

El problema del permiso parece haber sido listado como error de OpenSUSE: http://lists.opensuse.org/opensuse-bugs/2012-07/msg00920.html

Respuesta: 3

Así que tengo este fragmento de código: // Pestañas para el filtro Pestañas t = nuevas pestañas (); Estilo s = UIManager.getInstance (). GetComponentStyle ("Tab"); FontImage icon1 = FontImage.createMaterial (FontImage ....

Por razones que todavía no entiendo (todavía), hay algunas bibliotecas / paquetes Java que simplemente no funcionarán correctamente (o incluso se ejecutarán) cuando se implementen en un dispositivo Android. Bibliotecas como Guice o Apache Camel. ...

No entiendo qué sucede con la instancia de StreamResult. Veo que el objeto Transformer recibe source y streamResult: transformer.transform (source, streamResult); esto transforma ...

Estoy desarrollando trabajo por lotes en java-ee-7 en la parte superior del servidor de libertad. utilizando la API REST para iniciar el trabajo por lotes. El problema aquí es cuando intenté iniciar el trabajo por lotes para el mismo parámetro de entrada, nuevo ...