外部项目上的gradle运行任务

外部项目上的gradle运行任务,gradle,groovy,Gradle,Groovy,假设我有两个独立的项目: ./ | +- projectA | | | + build.gradle | + settings.gradle | + gradlew | + .gradle/ | + gradle/ | + submodulea/ | +- projectB | + build.gradle + settings.gradle + gradlew + .gradle/

假设我有两个独立的项目:

./
  |
  +- projectA
  |  |
  |  + build.gradle
  |  + settings.gradle
  |  + gradlew
  |  + .gradle/
  |  + gradle/
  |  + submodulea/
  |
  +- projectB
     |
     + build.gradle
     + settings.gradle
     + gradlew
     + .gradle/
     + gradle/
     + submoduleb/
我想从
:submoduleA
的构建脚本中为
:projectB:submoduleb
执行某些任务。例如:

项目b/submoduleb/build.gradle

//...
task test() {
    println 'hello from :projectB:submoduleb'
}
//...
如何从projectA/build.gradle调用
test

您不在gradle中调用任务。要运行的任务及其顺序根据用于调用Gradle的命令行自动确定

如果您希望子模块的构建中的任务始终在子模块的构建中的某一组任务之前或与之一起运行,则可以使用任务依赖项

例如projectA/build.gradle

build.dependsOn ':projectB:test'

task myTask() {
    dependsOn ':projectB:myProjectBTask'
}

使用此构建脚本,调用
gradle projectA:build
将在projectB中运行
test
任务,然后在projectA中运行
build
任务。类似地,调用
gradle projectA:myTask
将首先运行
myProjectBTask

您可以使用该类型的任务来调用外部gradle项目。只需指定其他项目的项目目录和要执行的任务:

task myTask(type: GradleBuild) {
    dir = file('path/to/other/project')
    tasks = ['test']
}
不幸的是,此任务类型仅提供纯任务执行,例如,无法从任务中检索反馈


如果您的设置需要以上任何功能,您可以在项目之间添加某种耦合(多项目构建、复合构建)或编写您自己的自定义解决方案。

这并不总是一个选项,并且声明“您不在Gradle中调用任务”通常是不正确的。您可以
project(“:module”).tasks.sometask.execute()
此外,您不显示如何添加外部项目
:projectB的配置,这几乎是问题的主要部分,例如:“根本不支持对任务调用'execute()。”抱歉,我忽略了一个事实,即这些项目没有共享一个通用的超级项目。您永远不应该对任务调用
execute()
!因为
projectA
projectB
是不相关的,所以不能。定义一个包含
projectA
projectB
的根项目,我认为“你不能”显然是不正确的。也许你正在寻找的术语是“你不应该”@无论如何,op说我会从:submoduleA的构建脚本中为:projectB:submoduleb执行某些任务。更复杂