0

我有以下可以正常工作的 Scala 2.10 脚本:

#!/bin/bash

classpath="${CLASSPATH}"
unset CLASSPATH

exec ${SCALA_HOME}/bin/scala -cp "${classpath}" "$0" "$@" 2>&1
!#

import stuff

但是当CLASSPATHis not时unset,它会失败,例如:

$ ./setter-for-catan.scala
./setter-for-catan.scala:12: error: not found: object play
import play.api.libs.json.JsArray
       ^

one error found

为什么会这样?

4

2 回答 2

2

编译器守护程序可能会留下一些时髦的状态。尝试fsc -shutdownscala -nc重置守护程序。

于 2013-07-03T12:00:51.487 回答
2

scala 脚本有一个适度的-debug选项。

用于-Ylog-classpath查看编译器正在使用什么。

-nc来说“没有编译服务器守护进程”。

用于fsc -shutdown重新开始。

包更改是令人厌恶的,因此路径中带有包名称或旧包对象等的意外目录会导致莫名其妙的构建问题。

用于PathResolver转储它看到的类路径。

带有您的包名称的空目录可能会干扰包发现。

${SCALA_HOME}/bin/scala -cp "${classpath}" scala.tools.util.PathResolver
${SCALA_HOME}/bin/scala -cp "${classpath}" scala.tools.util.PathResolver some-args

你会看到类似的东西:

apm@mara:~/tmp/scripts$ ./foo.sh
object Environment {
  scalaHome          = /media/Software/scala-2.10.1 (useJavaClassPath = true)
  javaBootClassPath  = <1122 chars>
  javaExtDirs        = 
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/ext
/usr/java/packages/lib/ext
  javaUserClassPath  = ""
  scalaExtDirs       = 
}
object Defaults {
  scalaHome            = /media/Software/scala-2.10.1
  javaBootClassPath    = 
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/resources.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/sunrsasign.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/jsse.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/jce.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/charsets.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/netx.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/plugin.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rhino.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/jfr.jar
/usr/lib/jvm/java-7-openjdk-amd64/jre/classes
/media/Software/scala-2.10.1/lib/akka-actors.jar
/media/Software/scala-2.10.1/lib/jline.jar
/media/Software/scala-2.10.1/lib/scala-actors.jar
/media/Software/scala-2.10.1/lib/scala-actors-migration.jar
/media/Software/scala-2.10.1/lib/scala-compiler.jar
/media/Software/scala-2.10.1/lib/scala-library.jar
/media/Software/scala-2.10.1/lib/scala-partest.jar
/media/Software/scala-2.10.1/lib/scalap.jar
/media/Software/scala-2.10.1/lib/scala-reflect.jar
/media/Software/scala-2.10.1/lib/scala-swing.jar
/media/Software/scala-2.10.1/lib/typesafe-config.jar
  scalaLibDirFound     = Some(/media/Software/scala-2.10.1/lib)
  scalaLibFound        = /media/Software/scala-2.10.1/lib/scala-library.jar
  scalaBootClassPath   = 
  scalaPluginPath      = /media/Software/scala-2.10.1/misc/scala-devel/plugins
}
 COMMAND: 'scala some-args'
RESIDUAL: 'scala some-args'
于 2013-07-02T01:42:41.837 回答