<<=
- это метод в TaskKey, который возвращает значение. Он нигде не обновляет изменяемое состояние, поэтому в примере кода результат первого вызова отбрасывается. Чтобы исправить это, объявите также packageBin как входные данные, но проигнорируйте полученное значение. Обратите внимание, что packageBin зависит от компиляции, поэтому в зависимости от компиляции нет необходимости.
dist <<= (update, crossTarget, packageBin in Compile) map { (updateReport, out, _) =>
Маловероятно, что вы хотите скопировать все файлы в UpdateReport
в каталог, основанный исключительно на имени файла. Для разных зависимостей может быть одинаковое имя файла. Кроме того, это будет включать зависимости от всех конфигураций, включая тестовые зависимости.
Для первой проблемы используйте связанный ModuleID
, чтобы построить путь в целевом каталоге, как это делается в каталоге lib_managed
, когда retrieveManaged := true
. Для решения второй проблемы выберите только те файлы, которые вам нужны.
updateReport.matching(configurationFilter(Runtime.name)).foreach...
См. Документы API sbt.UpdateReport и sbt.RichUpdateReport для других полезных методов.
Если вы не обеспокоены конфликтами имен файлов, вы можете получить файлы зависимостей из dependencyClasspath. Например:
dist <<= (crossTarget, packageBin in Compile, dependencyClasspath in Runtime) map { (out, _, cp) =>
и получите Seq[File]
от cp.files
.