Получение работы sbt-assembly
Итак, до сих пор я составлял проект Scala с SBT (через стек SafeSE). Я хочу запустить код через несколько машин, используя sbt-assembly. Следуя указаниям, единственное изменение, которое я сделал, было в моем файле project/Build.scala
. Вот связанная с этим часть:
resolvers += "Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases",
resolvers += "artifactory" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases",
libraryDependencies += "com.eed3si9n" % "sbt-assembly" % "0.8.3"
Когда я запускаю sbt compile
, однако, я получаю эту ошибку:
sbt.ResolveException: unresolved dependency: com.eed3si9n#sbt-assembly/scala_2.9.1/sbt_0.11.2;0.8.3: not found
.
Что я делаю неправильно?
Спасибо!
ИЗМЕНИТЬ
Создал файл build.sbt
в той же папке, что и Build.scala
(папка /project/
), и в ней есть две строки:
Seq[Setting[_]](resolvers += "artifactory" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases",
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.3"))
Теперь ошибка:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: com.eed3si9n#sbt-assembly;0.8.3: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes.
[warn] com.eed3si9n:sbt-assembly:0.8.3 (sbtVersion=0.11.2, scalaVersion=2.9.1)
[warn]
[error] {file:/Users/myname/current/projectname/project/}default-d7da9a/*:update: sbt.ResolveException: unresolved dependency: com.eed3si9n#sbt-assembly;0.8.3: not found
ИЗМЕНИТЬ 2
Hm, после успешного выполнения sbt compile
, я должен просто войти в консоль sbt
и ввести assembly
?
> assembly
[error] Not a valid command: assembly
[error] Not a valid project ID: assembly
[error] Not a valid configuration: assembly
[error] Not a valid key: assembly
[error] assembly
[error]
EDIT 3 JK получил его. Пришлось добавить информацию build.sbt
, как указано в GitHub README.
Ответы
Ответ 1
Здесь есть два момента. Один из них заключается в том, что плагины SBT - это не только зависимости библиотек - в частности, они используют текущую версию SBT аналогично тому, как другие библиотеки Scala используют версию Scala. Другим является то, что libraryDependencies
в project/Build.scala
влияет на зависимости для проекта, а не на сборку.
Полная сборка SBT сама по себе является проектом SBT, расположенным только на одном уровне по дереву каталогов и поэтому может иметь собственную конфигурацию так же, как и обычная сборка. В отличие от обычной сборки, где требуется "полная сборка", необходимо в нескольких обстоятельствах, почти никогда нет причины использовать полную сборку для сборки, поэтому использование файлов .sbt
, расположенных в project/
, почти всегда достаточно.
Другая проблема - это управление версиями. SBT имеет функцию утилиты addSbtPlugin
, которая обрабатывает все для вас. Он принимает идентификатор модуля и добавляет все необходимые сведения о версиях SBT и Scala.
Итак, чтобы получить sbt-assembly, работающий в полной сборке, вы создаете файл .sbt
в project/
(обычно либо project/build.sbt
или project/plugins.sbt
) и размещаете там свои конструкторы и зависимости:
resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.3")