Вы получаете ошибку Could not get unknown property 'runtime' for configuration container
, потому что, когда gradle конфигурирует ваш корневой проект и пытается создать задачу copyDependencies
, подпроекты еще не были оценены, поэтому Gradle не знает о конфигурации "во время выполнения" на данном этапе ( java
плагин еще не был применен к подпроектам).
Таким образом, одним из решений было бы заключить это создание задачи в gradle.projectsEvaluated
ловушку жизненного цикла:
gradle.projectsEvaluated {
task copyDependencies(type:Copy) {
// task definition ...
}
}
Но тогда у вас возникнут другие проблемы, потому что вы хотите скопировать разные источники в разные каталоги назначения (см. Как копировать в несколько мест назначения с помощью задачи копирования Gradle? для возможного решения этой проблемы)
Я думаю, что лучшим способом было бы создать различные copyDependencies
задачи, по одной на подпроект, и создать задачу «агрегатора» в корневом проекте, которая будет зависеть от задач этих подпроектов:
// aggregator task at root project level
task copyDependencies
// create copydependencies task for each (non-test) subproject
gradle.projectsEvaluated {
nonTestProjects.each {
Project proj = project(it)
Task task = proj.task('copyDependencies', type: Copy) {
from proj.configurations.runtimeClasspath
into proj.file("dependencies")
doFirst {
file('dependencies').deleteDir()
}
}
copyDependencies.dependsOn task
}
}