2012-06-11 4 views
13

Итак, до сих пор я составлял свой проект Scala с помощью SBT (через стек Typesafe). Я хочу запустить код на нескольких машинах сейчас, через sbt-assembly. Следуя инструкциям, единственное изменение, которое я сделал, было в моем файле project/Build.scala. Вот соответствующая часть:Получение работы sbt-сборки

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.

Что я делаю неправильно?

Спасибо!

EDIT Создано 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 

EDIT 2 Хм, после успешного завершения sbt compile, s Могу ли я просто ввести консоль 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.

+0

«информацию как указанная в GitHub README "- ссылка, пожалуйста? – Vasily802

ответ

10

Здесь есть два момента. Один из них заключается в том, что плагины SBT не являются только зависимостями библиотек - в частности, они используют текущую версию SBT аналогично тому, как другие библиотеки Scala используют версию Scala. Другим является то, что libraryDependencies в project/Build.scala влияет на зависимости для проекта , а не для build.

SBT полная сборка сама по себе является проектом SBT, расположенным только на одном уровне вниз по дереву каталогов и поэтому может иметь собственную конфигурацию так же, как и обычная сборка. В отличие от обычной сборки, когда требуется «полная сборка», необходимо при нескольких обстоятельствах, почти никогда не существует причины использовать полную сборку для сборки, поэтому использование файлов .sbt, расположенных в project/, почти всегда достаточно.

Другая проблема - это управление версиями. SBT имеет функцию полезности, которая называется addSbtPlugin, которая обрабатывает все для вас. Он принимает идентификатор модуля и добавляет всю необходимую информацию о версиях SBT и Scala.

Таким образом, чтобы получить SBT-узел, работающий в полной сборке, вы создаете .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") 
+0

Каков формат аргументов 'addSbtPlugin'? Что я сделал бы для 'sbt-assembly'? – adelbertc

+0

'addSbtPlugin (" com.eed3si9n "%" sbt-assembly "%" 0.8.3 ")', поэтому часть вашей build.scala, которая имеет дело с настройками, должна выглядеть так: Seq [Setting [_]] (resolvers + = ..., resolvers + = ..., addSbtPlugin (...)) ' –

+0

На самом деле мне внезапно приходит в голову, что вы можете помещать его в неправильный файл. Если это проект/Build.scala, тогда его включение туда не принесет никакой пользы (он объявит, что ваш источник _source code_ зависит от sbt-assembly, а не от проекта). Чтобы проект использовал его, установите для него настройки либо в project/build.sbt, либо в project/project/Build.scala (желательно первый, так как почти никогда не существует причина использовать полную сборку для мета-сборки проекта). –

Смежные вопросы