Gradle任务don';t在所有子项目中运行
我有以下多模块项目结构Gradle任务don';t在所有子项目中运行,gradle,multi-project,gradle-task,Gradle,Multi Project,Gradle Task,我有以下多模块项目结构 Root project 'reports-be' +--- Project ':auth' +--- Project ':builder' | +--- Project ':builder:base' | \--- Project ':builder:reporting' \--- Project ':common' 当我为/builder子项目运行build任务时,我希望所有子项目都会执行build任务(对于:builder:base和:builder:
Root project 'reports-be'
+--- Project ':auth'
+--- Project ':builder'
| +--- Project ':builder:base'
| \--- Project ':builder:reporting'
\--- Project ':common'
当我为/builder子项目运行build
任务时,我希望所有子项目都会执行build
任务(对于:builder:base
和:builder:reporting
)
但是gradle只对子项目:builder
执行构建任务。
根据build
的要求,应完成所有子项目的任务
为什么没有发生
另外,我发现命令gradle-pbuildercleanbuild
的工作原理与我预期的一样。但我真的不明白第一次提到的gradle任务有什么问题
另外,我在每个子项目和我的设置中都有build.gradle
rootProject.name = 'reports-be'
include 'common'
include 'builder'
include 'auth'
include 'builder:base'
include 'builder:reporting'
:builder:build
是项目:builder
中任务build
的限定任务名称,因此只执行这一个任务(及其依赖项)。所有(子)项目中的执行只能针对非限定的任务名称,如build
。您可以切换到builder
目录并从那里运行gradle build
,但是,如果您希望在同一调用中为所有项目运行clean
,这种方法将不起作用,并且在使用包装器(gradlew
)时有点难看。据我所知,您的用例没有直接的解决方案
如果我没弄错的话,:builder
项目只是一个用于组织目的的虚拟项目,不包含任何实际的源代码或任何其他要构建的内容。在这种情况下,您可以使用builder/build.gradle
中的任务依赖项来解决问题:
task build {
dependsOn ':builder:base:build', ':builder:reporting:build'
}
我发现了三种可能的解决方案:
一,。
gradle-p builder干净构建
2:
三,。添加对builder/build.gradle的修改(适用于gradle 6.3):
然后从根项目目录运行gradleclean build
。
感谢您提供此解决方案感谢您的解释。这就是我希望知道的!把我的两分钱放在你的解释上。对于Gradle 6.3,正确的命令:build{dependsOn':builder:base:build',“:builder:reporting:build'}
也可以切换目录并运行Gradle clean build
(不是gradlew
)是的,但仅当机器上安装了Gradle
时。如果使用包装器,则通常不提供此功能。如果任务build
已经存在,则您只能在不创建它的情况下引用它(如在您的示例中),这可能是因为您应用了java
插件。再次感谢您。你完全正确,我已经在我的机器上安装了gradle
,并将java
插件应用到我的项目中:)
task build {
dependsOn ':builder:base:build', ':builder:reporting:build'
}
cd ./builder
gradle clean build
build {
dependsOn ':builder:base:build', ':builder:reporting:build'
}