Зависит от нескольких задач в сборке нескольких проектов
В настоящее время у меня есть задача, которая запускает сервер Google Cloud, запускает тесты и останавливает сервер. Определяется в корневом проекте:
buildscript {...}
allprojects {...}
task startServer (dependsOn: "backend:appengineStart") {}
task testPaid (dependsOn: "app:connectedPaidDebugAndroidTest") {}
task stopServer (dependsOn: "backend:appengineStop") {}
task GCEtesting {
dependsOn = ["startServer",
"testPaid",
"stopServer"]
group = 'custom'
description 'Starts GCE server, runs tests and stops server.'
testPaid.mustRunAfter 'startServer'
stopServer.mustRunAfter 'testPaid'
}
Я попробовал несколько способов написать что-то вроде этого, коротко с одной задачей. Я не понял, как ссылаться на задачу из другого проекта и вызывать для нее mustRunAfter. Это не работает (я также пытался ссылаться на Project.tasks.getByPath, root.tasks и т. Д.):
task GCEtesting {
dependsOn = ["backend:appengineStart",
"app:connectedPaidDebugAndroidTest",
"backend:appengineStop"]
group = 'custom'
description 'Starts GCE server, runs tests and stops server.'
"app:connectedPaidDebugAndroidTest".mustRunAfter "backend:appengineStart"
"backend:appengineStop".mustRunAfter "app:connectedPaidDebugAndroidTest"
}
Является ли это возможным? Какой правильный синтаксис, чтобы заставить это работать?
1 ответ
Похоже, ваша проблема в том, что вы лечите dependsOn
в значении "вызвать эту задачу". Фактически это означает, что "убедитесь, что результат зависимой задачи доступен до запуска зависимой задачи". Вот почему ваше первое решение не сработало: заявления вроде testPaid.mustRunAfter
влияет только на действия testPaid
Сама задача, а не ее зависимости.
Во всяком случае, вы можете получить поведение, которое вы хотите, используя dependsOn
а также finalizedBy
, но они должны быть объявлены в файле сборки подпроекта приложения.
Приложение / build.gradle:
task connectedPaidDebugAndroidTest {
//
//...
//
dependsOn 'backend:appengineStart' // Ensure appengineStart is run at some point before this task
finalizedBy 'backend:appendginStop' // Ensure appengineStop is run at some point after this task
}
Затем вы можете запустить свои тесты просто с gradle app:connectedPaidDebugAndroidTest
, Если вы действительно хотите определить задачу в корневом проекте для запуска тестов, то это тоже легко:
build.gradle:
task GCEtesting {
dependsOn = "app:connectedPaidDebugAndroidTest"
}