Сбор зависимостей по sbt 0.10 (помещение всех jar-зависимостей в target/scala-version/lib/)
Я использую SBT 0.10 с Scala 2.9.1.
Однако я не хочу одну огромную банку. Я просто хочу, чтобы файлы зависимостей попали в каталог target/scala-2.9.1.final/lib.
Причина, по которой я не хочу иметь одну огромную банку, в том, что в проекте используется много библиотек, и обычно меняется только приложение.jar. Однако, поскольку это многоязычный проект, и не у всех членов команды есть scala или sbt, jars просто передаются в git. Наличие регулярного регулярного обновления одного огромного дара приведет к увеличению размера репо.
Как я могу скопировать эти зависимости?;)
3 ответа
Вы не указали конфигурацию ivy для копирования конфигураций, но вот полностью рабочий пример, который скопирует все ваши управляемые зависимости в target/<scala version>/lib
папка (версия scala задается задачей crossTarget). Просто скопируйте это и поместите в файл project/Build.scala
(или любое другое имя файла, которое вы хотите):
import sbt._
import Keys._
object MyBuild extends Build {
lazy val copyDependencies = TaskKey[Unit]("copy-dependencies")
def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map {
(updateReport, out, scalaVer) =>
updateReport.allFiles foreach { srcPath =>
val destPath = out / "lib" / srcPath.getName
IO.copyFile(srcPath, destPath, preserveLastModified=true)
}
}
lazy val root = Project(
"root",
file("."),
settings = Defaults.defaultSettings ++ Seq(
copyDepTask
)
)
}
Если вы хотите конкретную конфигурацию, замените
updateReport.allFiles
от updateReport.select(configuration = Set("compile"))
или любую конфигурацию плюща, которую вы хотите.
Смотрите задание xitrum-package: https://github.com/ngocdaothanh/xitrum/blob/master/plugin/src/main/scala/XitrumPlugin.scala
Он копирует все зависимости в каталог target/xitrum_package.
Различные ключи "Classpath" содержат различные представления о пути к классам, но, вероятно, проще всего изменить плагин sbt-assembly, чтобы просто помещать файлы jar в каталог вместо выполнения цикла unzip/rezip. Плагин очень маленький (всего 150 строк), и из беглого взгляда довольно очевидно, что именно нужно менять.