Есть ли где-нибудь руководство по SBT для не-Scala программистов? - PullRequest
21 голосов
/ 07 июля 2011

Когда-нибудь я хотел бы выучить Scala.То, что я вижу о языке от людей, которые любят его, очень обнадеживает.

Сегодня, однако, не тот день.Сегодня я просто хотел бы внести некоторые изменения в файл сборки моей команды.К сожалению, этот файл сборки был составлен вместе с SBT и почти непонятен.

Моя главная проблема заключается в том, что мне кажется, что SBT представляет некоторую огромную коллекцию новых операторов, которые работают со строками и списками для создания некоторыхвид объекта sbt.Например, в sbt:

"args4j" % "args4j" % "2.0.12"

Видимо фактически определено;однако, я даже не могу сказать, какой это тип в repl scala, так как в repl я получаю ощутимую ошибку:

scala> val tstcrap = "args4j" % "args4j" % "2.0.12"
<console>:6: error: value % is not a member of java.lang.String
       val tstcrap = "args4j" % "args4j" % "2.0.12"

Я получаю эту ошибку даже после настройки пути к классам для включенияфайл sbt-launch.jar и выполнение import sbt._.

Аналогично, я имею дело с такими вещами:

 val jarSources = (descendents(classesOutput ##, "*") ---
                  assemblyExclude(classesOutput ##))

Что это за оператор ##, что делает ---и, что более важно, каков тип этого выражения?Все ли эти новые операторы документированы где-нибудь, и есть ли какой-нибудь способ получить реплику scala, использующую тот же язык, который используется в файлах сборки sbt?

Просмотр этого файла sbt напоминает мне о попыткерасшифруйте perl, не читая ни одной из соответствующих страниц руководства.(Не рекомендуемое занятие)

Обновление : просмотрев ссылки в ответе ниже и просмотрев другие вопросы и ответы с тегами sbt, я натолкнулся на основную статьюзнания о scala, которые мне не хватало: scala позволяет определять неявные преобразования, которые будут вызваны до разрешения методов.В этом случае sbt определяет внутри черты ManagedProject неявное преобразование из String в закрытый класс sbt.GroupID, так что

"a" % "b"

действительно является чем-то вроде

(new GroupID("a")) % "b"

Я предполагаю, что порядок разрешения и другие правила, касающиеся неявных преобразований, должны быть очень сложными;это почти напоминает мне о ночных кошмарах, которые вы можете представить в C ++ с перегрузкой операторов при выполнении функций, не являющихся членами.

Ответы [ 2 ]

5 голосов
/ 07 июля 2011

Поскольку файл сборки SBT является полноценным исходным файлом Scala и опирается на некоторые библиотеки, предоставляемые самим SBT, трудно хорошо охватить SBT, не полагаясь на некоторое знакомство со Scala. Я не знаю такого руководства.

По конкретным вопросам, которые вы поднимаете, я думаю, что эти вики-страницы помогут:

Если вы хотите запустить Scala REPL с доступными библиотеками SBT, попробуйте следующее:

$ sbt console-project

Некоторые другие полезные команды перечислены в http://code.google.com/p/simple-build-tool/wiki/RunningSbt.

1 голос
/ 03 июля 2016

Обновление 2016 (5 лет спустя).
Это не полное руководство, а статья " Sbt иероглифы и мульти-проекты, объясненные " из ДиванVisagie может помочь начать использовать sbt.

Plus, sbt документация в настоящее время достаточно полная и охватывает несколько проектов в одной сборке .
Оператор '---' описан в Навигаторе (начиная с версии 0.2 ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...