【问题标题】:Why some Gradle subproject tasks are accessible from root project?为什么某些 Gradle 子项目任务可以从根项目访问?
【发布时间】:2018-03-01 02:02:20
【问题描述】:

我找不到关于这个话题的任何解释,到处都是事实,但我对它的工作原理很感兴趣。

例如,让我们以“构建”任务为例,该任务由子项目中的“java”插件提供(但在根项目中不可用)。

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

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

【问题讨论】:

    标签: java gradle


    【解决方案1】:

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

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

    对于任务依赖关系,您可以简单地使用包含绝对任务路径的字符串,例如dependsOn ':sub:build'dependsOn ':build'。在这种情况下,仅使用 'build' 将仅引用当前项目中具有特定名称的任务。

    【讨论】:

    • 这似乎回答了最初的问题,并且似乎描述了发生了什么。
    【解决方案2】:

    build 任务是lifecycle task(即,它本身实际上不做任何事情,但它可以dependsOn 其他任务)。请参阅base plugins,其中说明了有关base 插件的以下内容

    添加标准生命周期任务

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

    apply plugin: 'base'
    

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      相关资源
      最近更新 更多