Есть ли где-нибудь руководство для 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"
Я полагаю, что порядок разрешения и другие правила вокруг неявных преобразований должны усложняться; это почти напоминает мне о кошмарах, которые вы можете представить на С++ при перегрузке оператора, когда выполняются не-членные функции.
Ответы
Ответ 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 версия).