#scala #sbt
#scala #sbt
Вопрос:
Это для Scala 2.11.1 и sbt 0.13.5.
Допустим, у меня есть проект Scala / sbt со следующей структурой каталогов:
root/
build.sbt
src/ ..
project/
plugins.sbt
build.properties
LolUtils.scala
и я хочу использовать некоторую внешнюю библиотеку LolUtils.scala
. Как это обычно выполняется в sbt?
Если я просто добавлю нужные мне библиотеки в build.sbt
via libraryDependencies = ..
, то он не найдет их и завершится ошибкой в строке импорта с not found: object ..
помощью .
Если я добавляю отдельный project/build.sbt
, по какой-то причине он начинает не разрешать мои плагины, плюс мне нужно вручную указать версию Scala во вложенном project/build.sbt
, что является ненужным дублированием.
Каков наилучший способ добиться этого?
Комментарии:
1. Использует ли ваша библиотека Scala 2.10? Если вы хотите использовать свою библиотеку в определении сборки, она должна быть совместима с версией Scala, которую использует sbt. Я думаю, вам не следует переопределять версию Scala для определения сборки.
2. @lpiepiora Все версии в порядке, библиотека построена на основе версии 2.11.
3. вот что я имею в виду, определение сборки sbt компилируется с использованием Scala 2.10.x. Вы заявили, что используете Scala 2.11.1, что подходит для исходных текстов вашего проекта, но исходные
project/
тексты должны быть скомпилированы с использованием Scala 2.10.x4. @lpiepiora Верно, мне это не приходило в голову. Библиотеки также доступны для 2.10, является ли основная идея затем поместить их в
project/build.sbt
2.10 и построить с помощью 2.10 и сохранитьroot/build.sbt
на 2.11?5. @lpiepiora Попробовал, работает просто отлично, если я не вмешиваюсь
scalaVersion
в сборкуbuild.sbt
. Если вы хотите сделать это ответом, я соглашусь.
Ответ №1:
sbt является рекурсивным, что означает, что он использует себя для компиляции определения сборки, то *.sbt
есть файлов и *.scala
файлов в project
каталоге. Чтобы добавить дополнительные зависимости, чтобы использовать их в определении сборки, вы должны объявить их в project/build.sbt
.
В этом есть одно предостережение. Вы можете установить любые scalaVersion
для своего проекта, то есть в build.sbt
, но вы не должны изменять scalaVersion
в project/build.sbt
, поскольку это может противоречить sbt
используемой версии (что может привести или не привести к двоичной несовместимости для плагинов).
Sbt 0.13.5 использует Scala 2.10.4, и библиотека, которую вы собираетесь использовать, должна быть совместима с этой конкретной версией Scala.
> about
[info] This is sbt 0.13.5
...
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4