Многомодульный проект Gradle вызывает общие задачи из подмодулей

#java #gradle #build #build.gradle

#java #gradle #сборка #build.gradle

Вопрос:

У меня есть многомодульная настройка для проекта Java со следующей структурой.

 mainApp
|--> core-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|       
|--> lib-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> lib-another-module
|       |--> src
|       |--> build.gradle
|       |--> gradle.properties
|--> settings.gradle
|--> build.gradle
  

в mainApp/build.gradle я пытался

 task('collectBundles', type: Copy) {
    dependsOn "core-module:jar","lib-module:jar","lib-another-module:jar"
        
    into "$buildDir/image/"

    into("lib") {
        from project('core-module').file('build/libs/core-module.jar')
        from project('lib-module').file('build/libs/core-module.jar')
        from project('lib-another-module').file('build/libs/lib-another-module.jar')
    }
    outputs.upToDateWhen { false }
}
  

это dependsOn я пытаюсь решить, но я получаю ошибки

 task('collectBundles', type: Copy) {
    dependsOn subprojects.finaAll { it.tasks.findByName("jar") }
        
    into "$buildDir/image/"

    into("lib") {
        from project('core-module').file('build/libs/core-module.jar')
        from project('lib-module').file('build/libs/core-module.jar')
        from project('lib-another-module').file('build/libs/lib-another-module.jar')
    }
    outputs.upToDateWhen { false }
}
  

Даже я пытался dependsOn subprojects.findResult { it.tasks.findByName("jar") }

Я получаю ошибки как

 * What went wrong:
A problem occurred evaluating root project 'connectors'.

> Could not find method register() for arguments [{type=class org.gradle.api.tasks.Copy}, collectBundles, build_9f9pperbss2o8q2l4apsb5p9d$_run_closure15@c3c2ad7] on task set of type org.gradle.api.internal.tasks.DefaultTaskContainer.
> ```
  

Комментарии:

1. Где это findResult определено? В вашем первом примере, я думаю, вы используете findAll , однако вам, вероятно, следует использовать collect , поскольку findAll работает как фильтр и возвращает не задачи, а подпроекты.

2. О, я думал, что это Gradle API