0

我有一个支持多项目的设置插件。它目前适用于settings.gradle. 但是,这是一个问题,因为每个子项目没有相同的配置,并且我通过在命令行上设置的项目属性来控制一些插件行为-P

问题是这在没有使用该属性所需配置的项目上失败,并且我知道通过命令行将属性应用于特定子项目的已知方法。

settings.gradle.allprojects有没有办法知道哪些项目实际上已包含在构建中,而不是迭代?例如,当我这样做时:

gradle :subproject-name:build :other-subproject-name:build -PsomeProperty

我只想知道subproject-name并被other-subproject-name调用,以便我可以将设置插件仅应用于这些项目。

或者有没有办法以某种方式“范围”项目属性,仅限于特定项目?

4

1 回答 1

0

...有没有办法知道哪些项目实际上已包含在构建中?

这是一种误解。所有项目在包含它们时都是构建的一部分settings.gradle,并且它们都将被配置,因此它们具有关联的Project.

您最终要寻找的是,考虑到将要执行的任务,拥有这些任务的子项目是什么?为此,您可以获取 Gradle 的任务图,对于将要执行的所有任务,找到拥有每个任务的项目。

gradle.taskGraph.whenReady { graph ->
    def projects = graph.allTasks.collect { it.project }.toSet()
    projects.each {
        println "Project is being used in this build: " + it
    }
}
于 2017-07-11T17:25:09.980 回答