Сбор зависимостей по sbt 0.10 (помещение всех jar-зависимостей в target/scala-version/lib/)

Я использую SBT 0.10 с Scala 2.9.1.

Я прочитал http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars

Однако я не хочу одну огромную банку. Я просто хочу, чтобы файлы зависимостей попали в каталог 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 строк), и из беглого взгляда довольно очевидно, что именно нужно менять.

Другие вопросы по тегам