Ответ 1
Добавление следующего в ваш build.sbt
копирует все зависимости в папку lib_managed
в корневом каталоге вашего проекта.
retrieveManaged := true
Это то, о чем вы просите?
При переключении с одной из старых версий SBT на последнюю версию мы потеряли способность быстро захватить все jar-зависимости и скопировать их в каталог. Есть ли простой способ сделать то же самое в XSBT 0.11.2?
Добавление следующего в ваш build.sbt
копирует все зависимости в папку lib_managed
в корневом каталоге вашего проекта.
retrieveManaged := true
Это то, о чем вы просите?
Мы используем настраиваемое определение задачи, подобное этому, чтобы скопировать банки. Я понятия не имею, рекомендуется ли это для этого - там нет уродливого collect
. Не стесняйтесь публиковать улучшения (или, если хотите, изменить мой ответ в строке).
copyJarsFolder <<= (crossTarget in (Compile, packageBin)).apply(_ / "jars")
copyJars <<= inputTask { (argTask: TaskKey[Seq[String]]) =>
(copyJarsFolder, dependencyClasspath in Compile) map { (folder, cpEntries) =>
("mkdir -p " + folder).!
//
// find all dependencies
val jars = cpEntries.collect {
case attrFile if attrFile.metadata.keys.exists(_.label == "artifact") =>
// probably an external jar
attrFile.data
}
val copyCmd = jars.mkString("cp -p ", " ", " " + folder)
copyCmd.!
folder
}
}
Смотрите также: Как объявить зависимость проекта в SBT 0.10?
да, вы добавляете
retrieveManaged := true
и вы увидите банки в папке lib_managed
Использование sbt 0.13.7, IO.copy и друзей.
Определите несколько настроек где-нибудь в определении сборки:
val copyOutpath = settingKey[File]("Where to copy all libs and built artifact")
val copyAllLibsAndArtifact = taskKey[Unit]("Copy runtime dependencies and built artifact to 'copyOutpath'")
Определите поведение для этих настроек:
lazy val myProject = project
.in(file("."))
.settings(
copyOutpath := baseDirectory.value / "specialFolderForMyProgram",
copyAllLibsAndArtifact := {
val allLibs: List[File] = dependencyClasspath.in(Runtime).value.map(_.data).filter(_.isFile).toList
val buildArtifact: File = packageBin.in(Runtime).value
val jars: List[File] = buildArtifact :: allLibs
val `mappings src->dest`: List[(File, File)] = jars.map(f => (f, maxDynamicJarDir.value / f.getName))
val log = streams.value.log
log.info(s"Copying to ${copyOutpath.value}:")
log.info(s" ${`mappings src->dest`.map(_._1).mkString("\n")}")
IO.copy(`mappings src->dest`)
},
libraryDependencies ++= Seq(
//...
)
)
Возможно, мой ответ на этот вопрос поможет вам: Есть ли способ получить все зависимости проекта через sbt-плагин? Это самый простой способ узнать (я использую sbt 0.11.2).