Я немного запутался в документации Scala/SBT по созданию задач Scala. В настоящее время я могу запустить следующее из командной строки:
sbt ";set target := file(\"$PWD/package/deb-upstart\"); set serverLoading in Debian := com.typesafe.sbt.packager.archetypes.ServerLoader.Upstart; debian:packageBin; set target := file(\"$PWD/package/deb-systemv\"); set serverLoading in Debian := com.typesafe.sbt.packager.archtypes.ServerLoader.SystemV; debian:packageBin; set target := file(\"$PWD/package/rpm-systemd\"); rpm:packageBin"
Это сбрасывает мою цель каждый раз в другой каталог (deb-upstart, deb-systemv и rpm-systemd) и запускает задачу sbt-native-package для каждой из этих настроек. (Да, я понимаю, что компилирую его три раза, но sbt-native-packager, похоже, не имеет настройки для каталога артефактов)
Это отлично работает из приглашения bash, но я пытался поставить ту же цель в jenkins (заменив $PWD на $WORKSPACE), и я не могу правильно экранировать цитату. Я подумал, что может быть проще просто иметь задачу в build.sbt или project/Build.scala, которая запускает все три из этих задач, каждый раз меняя целевую переменную (и заменяя $PWD или $TARGET полным путем базового каталога).
Я пробовал следующее:
lazy val packageAll = taskKey[Unit]("Creates deb-upstart, deb-systenv and rpm-systemd packages")
packageAll := {
target := baseDirectory.value / "package" / "deb-upstart"
serverLoading in Debian := com.typesafe.sbt.packager.archetypes.ServerLoader.Upstart
(packageBin in Debian).value
target := baseDirectory.value / "package" / "deb-systemv"
serverLoading in Debian := com.typesafe.sbt.packager.archetypes.ServerLoader.SystemV
(packageBin in Debian).value
target := baseDirectory.value / "package" / "rpm-systemd"
(packageBin in Rpm).value
}
Но проблема в том, что .value заставляет задачи оцениваться еще до того, как моя задача будет запущена, поэтому они не получают новую целевую настройку (как указано в этом другом вопросе: Как я могу вызвать другую задачу из моей задачи SBT?)
packageBin
в пользовательскую задачу, а затем объединить их сpackageAll
? Выходные каталоги, если они были изменены только один раз, также могут быть установлены с помощьюtarget in Rpm
илиtarget in Debian
. - person Muki   schedule 20.01.2015target in [Setting]
, но если вы посмотрите внимательно, вы увидите, что я дважды меняю цель для Debian, один раз для Upstart ServerLoader и один раз для SystemV ServerLoader. Как мне извлечь каждый packageBin в пользовательскую задачу? - person djsumdog   schedule 20.01.2015