如何在Scala REPL中使用第三方库?

77

我已经下载了 Algebird 并且想要在 Scala 解释器 中尝试使用这个库。我该怎么做呢?


1
通常,REPL提示符中还有一个“:cp”命令,但它已经损坏了;它可能会在2.11中恢复。 - som-snytt
4个回答

114
当然,你可以使用scala -cp命令手动管理依赖关系。但是这变得非常繁琐,特别是如果你有多个依赖项。
更灵活的方法是使用sbt来管理你的依赖项。在search.maven.org上搜索你想要使用的库。例如,Algebird只需搜索algebird即可获得。然后创建一个build.sbt文件引用该库,进入目录并输入sbt console。它将下载所有依赖项,并启动一个Scala控制台会话,自动将所有依赖项添加到类路径中。
像Scala版本或库版本之类的更改只需要在build.sbt中进行简单的更改。为了玩耍,你不需要在目录中放置任何Scala代码。只有一个空的build.sbt文件就足够了。
下面是使用algebird的build.sbt示例:
name := "Scala Playground"

version := "1.0"

scalaVersion := "2.10.2"

libraryDependencies += "com.twitter" % "algebird-core" % "0.2.0"

编辑:当你想要使用一个库时,通常需要先导入库的命名空间。这也可以通过在build.sbt中添加以下一行来自动化处理:

initialCommands in console += "import com.twitter.algebird._"

7
SBT还可以处理许多其他事情,例如下载库可能具有的其他依赖项,根据您的scalaVersion值选择正确的版本,甚至可以通过在sbt提示符下键入例如 set scalaVersion:=“2.9.0-1” 来实现“动态切换”Scala版本。我强烈推荐使用SBT来尝试使用新库。 - Giorgos Keramidas
1
非常感谢您。作为一个从Ruby和它的神奇Gem系统转过来的Scala新手,这对我来说是一个很大的挑战。您提供的清晰度非常值得赞赏。 - Joseph Sawyer
我该如何使用这个 build.sbt 文件启动一个 sbt REPL,并加载 algebird 库? - user27886
3
创建一个仅包含 build.sbt 文件的目录,然后从该目录启动 sbt console - Rüdiger Klaehn
1
我强烈建议您也检查其他sbt(控制台)功能,例如能够连续编译和测试触发执行非常有用。http://www.scala-sbt.org/0.13/docs/index.html - koders

18

运行sbt console不会导入使用测试范围声明的库。要在REPL中使用这些库,请使用以下命令启动控制台:

sbt test:consoleQuick

然而,请注意,以这种方式启动控制台会跳过编译测试源代码的步骤。

来源:http://www.scala-sbt.org/0.13/docs/Howto-Scala.html


@Zoltan:sbt如何知道什么在测试范围内,什么不在?我的sbt只包含libraryDependencies ++= Seq("org.scalatest" %% "scalatest" % "3.0.5" % "test", "org.scalacheck" %% "scalacheck" % "1.14.0" % "test")。这里没有“测试作用域”。 - Ashwin
@Ashwin,该行末尾的% "test"正是告诉SBT这个依赖项仅用于测试的关键。如果您省略它,它将成为编译依赖项。 - Zoltán

7

你可以使用scala的-cp开关来保持类路径上的jar包。还有其他可用的开关,例如-deprecation-unchecked,用于打开各种警告。还有更多的开关可以用scala -X...scala -Y...找到。你可以使用scala -help来查找更多关于这些开关的信息。


4

这是使用 Ammonite(而不是Scala REPL)的答案 - 但它是一个非常好的工具,值得一提。

  1. 您可以通过一条命令来安装它:
sudo sh -c '(echo "#!/usr/bin/env sh" && curl -L https://github.com/lihaoyi/Ammonite/releases/download/2.1.2/2.13-2.1.2) > /usr/local/bin/amm && chmod +x /usr/local/bin/amm' && amm

或在 macOS 上使用 Homebrew:

brew install ammonite-repl  

对于Scala 2.10,您需要使用旧版本1.0.3:

sudo sh -c '(echo "#!/usr/bin/env sh" && curl -L https://github.com/lihaoyi/Ammonite/releases/download/1.0.3/2.10-1.0.3) > /usr/local/bin/amm && chmod +x /usr/local/bin/amm' && amm
  1. 在终端中运行Ammonite:
amm
// Displays
Loading...
Welcome to the Ammonite Repl 2.1.0 (Scala 2.12.11 Java 1.8.0_242)
  1. 使用 Ivy 导入第三方库:
import $ivy.`com.twitter::algebird-core:0.2.0`

然后,您可以在Ammonite-REPL中使用您的库:

import com.twitter.algebird._
import com.twitter.algebird.Operators._
Map(1 -> Max(2)) + Map(1 -> Max(3)) + Map(2 -> Max(4))
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接