Как использовать внешние зависимости в файлах sbt .scala?

#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.x

4. @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