SBT: выполнить задачу, используя другое значение задачи
Я переопределяю свои тесты, чтобы предоставить некоторые аргументы от конфигурации до набора тестов:
Это отрывок из моего Build.scala:
object Build extends Build {
lazy val myProject = (project in file("my_project")).settings(
test in Test := myProjectTest.value
)
val myProjectTest = Def.task {
(testOnly in Test).toTask(" tests.Suites -- " +
s"-Ddbserver=localhost " +
s"-Ddbport=3306 ").value
}
}
Это работает хорошо.
Теперь я хотел дать своему тестовому набору имя артефакта, подобного этому:
val myProjectTest = Def.task {
val art = (Keys.artifactPath in (Compile, packageBin)).value
(testOnly in Test).toTask(" tests.Suites -- " +
s"-Dartifact=${art.getCanonicalPath} " +
s"-Ddbserver=localhost " +
s"-Ddbport=3306").value
}
Но это показывает следующее сообщение об ошибке:
[error] /tmp/aa/project/Build.scala:17: Illegal dynamic reference: art
[error] s"-Dartifact=${art.getCanonicalPath} " +
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
Я кое-что знаю о внутренностях SBT, макросах, графике зависимостей задач, и мне даже удалось решить некоторые из моих задач с помощью областей. Здесь я попытался использовать карту или flatMap на (Keys.artifactPath in (Compile, packageBin))
но не может достичь желаемого результата. Всякий раз, когда я пытаюсь получить доступ .value
я получил Illegal dynamic reference
,
Пожалуйста, ведите меня. Мне просто нужно передать значение задачи другим параметрам (inputKey) параметров.
Версия SBT: 0.13.5
2 ответа
Методом проб и ошибок я сделал то, что хотел в конце концов, используя Def.taskDyn
(динамическое задание):
object Build extends Build {
lazy val myProject = (project in file("my_project")).settings(
test in Test := myProjectTest.value
)
lazy val myProjectTest = Def.taskDyn {
val art = (Keys.artifactPath in (Compile, packageBin)).value
(testOnly in Test).toTask(" tests.Suites -- " +
s"-Dartifact=${art.getCanonicalPath} " +
s"-Ddbserver=localhost " +
s"-Ddbport=3306")
}
}
Я никогда не видел, чтобы указать параметры теста через .toTask
,
Вы хотите увидеть, если testOptions in Test
у тебя работает? См. Раздел " Опции " документа "Тестирование".