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


Answers:


110

当然,无论如何都可以使用scala -cp并手动管理依赖项。但这变得非常乏味,尤其是在您具有多个依赖项的情况下。

一种更灵活的方法是使用sbt管理您的依赖项。在search.maven.org上搜索要使用的库。例如,只需搜索algebird即可使用Algebird。然后创建引用该库的build.sbt,输入目录并输入sbt console。它将下载您的所有依赖关系,并在类路径上自动启动具有所有依赖关系的scala控制台会话。

更改诸如scala版本或库版本之类的内容只是build.sbt中的一个简单更改。要玩游戏,您的目录中不需要任何Scala代码。仅包含build.sbt的空目录就可以了。

这里是一个build.sbt使用algebird:

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._"

1
谢谢,这真的很有帮助。
Harshal Kshatriya 2013年

7
SBT还可以处理很多其他事情,例如下载库可能具有的其他依赖项,根据您的scalaVersion值选择正确的版本,它甚至可以通过键入例如在sbt提示set scalaVersion := "2.9.0-1"。我强烈建议使用SBT尝试新的库。
Giorgos Keramidas

1
非常感谢你做的这些。作为Scala的新手(来自红宝石和奇妙的宝石系统),这让我感到非常沮丧。非常感谢您提供的清晰度。
约瑟夫·索耶2014年

3
创建一个仅包含build.sbt的目录。然后sbt console从该目录启动。
吕迪格Klaehn

1
我强烈建议您也检查其他sbt(控制台)功能,例如,能够连续编译和测试触发执行非常有用。scala-sbt.org/0.13/docs/index.html
noego

14

运行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")。而且这里没有“测试范围”。
阿什温

% "test"该行末尾的@Ashwin正是告诉SBT,此依赖性仅用于测试。如果不考虑它,它将成为编译依赖项。
佐尔坦

6

您可以使用scala的-cp开关将jar保留在类路径中。还有其他的交换机也可以,例如, -deprecation以及-unchecked用于打开各种警告。还有更多的与被发现scala -X...scala -Y...。您可以通过以下方式找到有关这些开关的更多信息:scala -help


2

这是使用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上使用brew:

brew install ammonite-repl  

对于scala 2.10,您需要使用oder版本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中使用以导入您的第3部分库:
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))
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.