У меня есть сборка Gradle, которая создает основной артефакт доставки (установщик) моего продукта. Проект Gradle, который моделирует это, имеет несколько разных зависимостей в разных конфигурациях. Многие из этих зависимостей находятся в конфигурации внешних модулей по умолчанию, а некоторые из этих модулей имеют конфигурацию testResults, которая содержит результаты (zipped) тестовой задачи.
Важно, чтобы те результаты тестов для всех зависимостей, где они существуют, были опубликованы как артефакты основной сборки продукта (для использования в качестве доказательства того, что тестирование имело место и было успешным). Это не проблема, если они не существуют.
Я попытался сделать это, итерации по всем конфигурациям сборки продукта, итерации по зависимостям в каждой и добавление программно созданной зависимости (в новой конфигурации, созданной для этой цели) в конфигурации testResults модуля.
Другими словами, я создаю зависимости вроде:
def processDependencyForTests( Dependency dependency ) {
def testResultsDependency = [
'group' : dependency.group,
'name' : dependency.name,
'version' : dependency.version,
'configuration' : 'testResults'
]
project.dependencies.add 'allTestResults', testResultsDependency
Это заполняет эту конфигурацию просто отлично, но, конечно, когда я пытаюсь что-либо сделать с ней, она не работает в первый раз, когда я сталкиваюсь с зависимостью от модуля, который на самом деле не имеет a testResults конфигурация:
def resolvedConfiguration = configurations.allTestResults.resolvedConfiguration
Результаты в этом:
Build file 'C:\myproduct\build.gradle' line: 353
* What went wrong:
Execution failed for task ':myproduct:createBuildRecord'.
> Could not resolve all dependencies for configuration ':myproduct:allTestResults'.
> Module version group:mygroup, module:myproduct, version:1.2.3.4, configuration:allTestResults declares a dependency on configuration 'testResults' which is not declared in the module descriptor for group:mygroup, module:mymodule, version:1.0
Неправдоподобно вместо этого явно указывать зависимости в декларативном режиме, потому что я хочу, чтобы они были получены из "любых реальных зависимостей, которые имеет проект продукта".
Как я могу гарантировать, что такие ожидаемые недостающие конфигурации не нарушают мою сборку? Я думал, что что-то делать с мягкими конфигурациями может быть ответом, но я даже не зашел так далеко (мне нужно сначала получить ResolvedConfiguration, насколько я могу судить). В качестве альтернативы, если способ, которым я это делаю, сумасшедший, что более естественная идиома Gradle для достижения этого?