Подтвердить что ты не робот

Есть ли где-нибудь руководство для SBT для программистов без Scala?

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

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

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

"args4j" % "args4j" % "2.0.12"

По-видимому, фактически определено; однако я даже не могу сказать, какой тип он имеет в реплике 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"

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

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

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

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

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

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

"a" % "b"

На самом деле что-то вроде

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

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

4b9b3361

Ответ 1

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

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

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

$ sbt console-project

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

Ответ 2

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

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