Mam kompilację Gradle, która generuje główny artefakt dostarczalny (instalator) mojego produktu. Projekt Gradle, który modeluje to ma wiele różnych zależności w różnych konfiguracjach. Wiele z tych zależności znajduje się w domyślnej konfiguracji modułów zewnętrznych, a niektóre z tych modułów mają konfigurację testResults
zawierającą (zipowane) wyniki zadania testowego.Obsługa brakującej konfiguracji w zależności w budowie Gradle
Ważne jest, aby wyniki testów dla wszystkich zależności, o ile istnieją, zostały opublikowane jako artefakty w głównej kompilacji produktu (w celu wykorzystania jako dowód, że testy miały miejsce i zakończyły się powodzeniem). To nie jest problem, jeśli nie istnieją.
Próbowałem zrobić to poprzez iterację wszystkich konfiguracji kompilacji produktu, iterację po zależnościach w każdym i dodanie programowo utworzonej zależności (w nowej konfiguracji stworzonej do tego celu) na konfiguracji testResults
modułu.
Innymi słowy, tworzę zależności tak:
def processDependencyForTests(Dependency dependency) {
def testResultsDependency = [
'group' : dependency.group,
'name' : dependency.name,
'version' : dependency.version,
'configuration' : 'testResults'
]
project.dependencies.add 'allTestResults', testResultsDependency
ta zapełnia że konfiguracja dobrze, ale oczywiście, gdy próbuję zrobić nic z nim, to nie pierwszy raz spotykam się zależność od moduł, który w rzeczywistości nie mieć danej testResults
konfiguracji:
def resolvedConfiguration = configurations.allTestResults.resolvedConfiguration
wyniki w tym:
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
To nie jest praktyczne, aby zamiast tego jawnie wymieniać zależności w sposób deklaratywny, ponieważ chcę, aby były wyprowadzane z "zależności od tego, jakie projekty produktu mają".
Jak mogę się upewnić, że takie oczekiwane brakujące konfiguracje nie powodują utraty mojej kompilacji? Pomyślałem, że odpowiedź na to pytanie może być związana z łagodnymi konfiguracjami, ale nie zaszedłem aż tak daleko (najpierw muszę uzyskać ResolvedConfiguration
, o ile wiem). Alternatywnie, jeśli sposób w jaki robię to jest szalony, co jest bardziej naturalnym idiomem Gradle, aby to osiągnąć?
Czy kiedykolwiek znaleźć rozwiązanie do obsługi brakujących konfiguracje? – knuton