使 jar 文件可用于 scala REPL

Making jar files available to the scala REPL

我似乎无法让它工作,所以我尝试了可能是最直接的情况——即,检索 jar 文件并进入给定目录,然后从该目录启动 scala REPL——仍然运气不好。

我知道 jar 文件很好并且引用正确(例如,我可以通过 eclipse/scala ide 从项目目录访问它们)

我也知道我的导入语句(如下所示)是有效的。

cd ~/my_scala_jars

从 maven 存储库中检索工件

wget -q -nd -np -r \
    http://repo1.maven.org/maven2/org/scalaz/scalaz-core_2.12.0-M1/7.1.2/scalaz-core_2.12.0-M1-7.1.2.jar

启动 scala REPL 并将 jar 添加到 REPL 类路径:

scala -cp scalaz-core_2.12.0-M1-7.1.2.jar

scala> import scalaz.stream.io
<console>:7: error: object stream is not a member of package scalaz
   import scalaz.stream.io

如果它有用,用不同的 jar 尝试这个(我下载了上面用 scalaz 显示的)有时会导致 REPL 抛出 not found 错误

scala> import breeze.linalg._ 
<console>:7: error: not found: value breeze
    import breeze.linalg._

在我看来,REPL 应该可以识别这些 jar,因为该目录已添加到我的 CLASSPATH 中,而且还因为我相信当前目录也已添加到类路径中(至少在 REPL 会话期间)--仍然都失败了。

我不确定为什么没有提取 jar 文件,因为我还没有真正尝试过这样做。我所做的并且发现有用的是为特定目的创建许多 build.sbt 文件,例如用于在 REPL 中使用特定的库套件。

如果你这样做,然后使用命令 sbt console 从包含相应 build.sbt 的目录启动 REPL,那么你可以在控制台上获得你想要的库该控制台的类路径。

这可能不太理想,但它确实有效,我发现它非常有用。