为什么可以从根项目访问某些Gradle子项目任务?

时间:2017-09-20 06:30:11

标签: java gradle

我无法找到关于这个主题的任何解释,只是作为一个事实给出了它,但我对它是如何工作感兴趣。

例如,让我们采取'构建'任务,这是由子项目中的'java'插件提供的(但在根项目中不可用)。

  • 在root中我们可以调用'gradle build''gradle:mysubproject:build' 将调用eqally和subprojects构建任务。
  • 但是,在root项目中我们无法编写'build dependsOn someOtherTask',因为它在root-java插件中不可用 没有添加。

什么使构建任务在root中可用?是否有一些属性使父项目中的任务可用?

2 个答案:

答案 0 :(得分:0)

如果在多项目构建中将任务名称作为参数调用Gradle,则将执行在任何根或子项目中具有指定名称的每个任务。如果您只想执行给定名称的特定任务,请对子项目使用:mySubProject:build之类的任务路径,或为根项目使用:build

请注意,这与访问build.gradle文件中的项目无关。在此文件中,只有当前项目的任务可用。要访问其他项目中的任务,您可以使用他们的任务容器,如rootProject.tasks['build']project(':sub').tasks['build']。但是,您可能会遇到问题,导致在您尝试访问它们时可能无法创建任务。

对于任务依赖项,您只需使用包含绝对任务路径的字符串,例如dependsOn ':sub:build'dependsOn ':build'。在此上下文中仅使用'build'将仅引用当前项目中具有特定名称的任务。

答案 1 :(得分:-1)

build任务是lifecycle task(即一项任务本身并没有做任何事情,但它可以dependsOn其他任务)。请参阅base plugins,其中列出了有关base插件

的以下内容
  

添加标准生命周期任务

如果您想在根项目中执行build任务,则需要添加:

apply plugin: 'base'