Как да използвате библиотеки на трети страни със Scala REPL?

Изтеглих Algebird и искам да изпробвам няколко неща в интерпретатора на Scala с помощта на тази библиотека. Как да постигна това?


person Harshal Kshatriya    schedule 15.09.2013    source източник
comment
Обикновено има и команда :cp от подканата REPL, но тя е повредена; може да се върне през 2.11.   -  person som-snytt    schedule 15.09.2013


Отговори (4)


Разбира се, можете да използвате scala -cp каквото и да управлявате ръчно вашите зависимости. Но това става доста досадно, особено ако имате множество зависимости.

По-гъвкав подход е да използвате sbt за управление на вашите зависимости. Потърсете библиотеката, която искате да използвате, на search.maven.org. Algebird например е достъпен чрез просто търсене на algebird. След това създайте build.sbt, препращащ към тази библиотека, влезте в директорията и въведете sbt console. Той ще изтегли всичките ви зависимости и ще започне сесия на scala конзола с всички зависимости автоматично на classpath.

Промяната на неща като версията на 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._"
person Rüdiger Klaehn    schedule 15.09.2013
comment
Благодаря, това наистина е полезно. - person Harshal Kshatriya; 15.09.2013
comment
SBT може да се погрижи и за много други неща, напр. изтегляне на други зависимости, които библиотеката може да има, избиране на правилната версия в зависимост от вашата стойност на scalaVersion и дори може да превключва в движение между версии на scala, като напишете напр. при sbt подкана set scalaVersion := "2.9.0-1". Силно препоръчвам използването на SBT за експериментиране с нови библиотеки. - person Giorgos Keramidas; 15.09.2013
comment
Благодаря ви много за това. Като нов човек в Scala (идвам от ruby ​​и това е прекрасна система от скъпоценни камъни), това беше голямо разочарование за мен. Яснотата, която предложихте, е високо оценена. - person Joseph Sawyer; 30.06.2014
comment
Как бих използвал този build.sbt, за да стартирам sbt REPL, който зарежда библиотеката algebird? - person user27886; 28.06.2016
comment
Създайте директория, съдържаща само build.sbt. След това стартирайте sbt console от тази директория. - person Rüdiger Klaehn; 29.06.2016
comment
Горещо ви препоръчвам да проверите и други функции на sbt (конзола), например възможността за непрекъснато компилиране и тестване със задействани изпълнения е много полезно. scala-sbt.org/0.13/docs/index.html - person eaorak; 17.12.2016
comment
Не работи за мен - person Sam; 21.12.2020

Изпълнението на sbt console няма да импортира библиотеки, декларирани с тестов обхват. За да използвате тези библиотеки в REPL, стартирайте конзолата с

sbt test:consoleQuick

Трябва да знаете обаче, че стартирането на конзолата по този начин пропуска компилирането на вашите тестови източници.

Източник: http://www.scala-sbt.org/0.13/docs/Howto-Scala.html

person Zoltán    schedule 21.01.2015
comment
@Zoltan : Как sbt знае какво е в обхвата на теста и какво не? Моят sbt съдържа само libraryDependencies ++= Seq("org.scalatest" %% "scalatest" % "3.0.5" % "test", "org.scalacheck" %% "scalacheck" % "1.14.0" % "test"). И тук няма „обхват на теста“. - person Ashwin; 15.05.2019
comment
@Ashwin % "test" в края на този ред е точно това, което казва на SBT, че тази зависимост е само за тестове. Ако го оставите, той ще се превърне в зависимост от компилиране. - person Zoltán; 17.05.2019

Можете да използвате превключвателя -cp на scala, за да запазите jar в пътя на класа. Налични са и други превключватели, например -deprecation и -unchecked за включване на различни предупреждения. Много други могат да бъдат намерени с scala -X... и scala -Y.... Можете да намерите повече информация за тези превключватели с scala -help

person S.R.I    schedule 15.09.2013

Това е отговор, използващ 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

или използване на brew на macOS:

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, за да импортирате вашата библиотека от 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))
...
person Valy Dia    schedule 13.05.2020