Gradle多项目任务执行行为

时间:2016-03-15 14:17:00

标签: eclipse java-ee gradle build ear

我正在使用Eclipse的STS插件来玩gradle多项目构建。我认为在阅读tutorial后我得到了基础知识,但我无法重现所显示的行为。添加时

allprojects {
    task hello << {task -> println "I'm $task.project.name" }
}
subprojects {
    hello << {println "- I GradleMaster"}
}

到父项目的build.gradle我会假设为每个项目执行'hello'任务。对于子项目实际上是2次,但结果只是:

[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks: 
[sts]      :hello
[sts] -----------------------------------------------------
:hello
I'm GradleMaster

BUILD SUCCESSFUL

我的项目树或多或少看起来像这样:

Application/
    GradleMaster/
        build.gradle
        settings.gradle
    EAR/
        build.gradle
    EJB/
        build.gradle
    AppClient/
        build.gradle

GradleMaster / settings.gradle:

include ':EAR', ':EJB', ':AppClient' 

如您所见,父项目与子项目处于同一级别。我已经在更高级别的根项目中采用了另一种方式,但我没有注意到任何差异。

我也想知道在根项目上执行所有项目共有的任务时gradle的行为方式。例如,如果所有子项目都应用'base'插件,那么根项目不应该“清理”因为所有子项目也会执行'clean'版本吗?

1 个答案:

答案 0 :(得分:0)

在编写问题时,我没有想到它可能是Eclipse STS插件的问题,而不是Gradle本身。事实上,我甚至没有提到我使用Gradle和Eclipse,这使得这个问题几乎无法回答。

原来是STS插件调用任务的方式。有任务和任务选择器。调用任务仅在项目中执行任务,而调用任务选择器在多构建项目中执行同名的所有任务。

Gradle论坛中的

st_oehme's post让我走上正轨。

我没有安装Gradle STS的Eclipse,所以我无法确切地告诉你要调用任务选择器而不是单个任务。也许其他人可以添加......