【问题标题】:Skipping gradle subtask in a subproject在子项目中跳过 gradle 子任务
【发布时间】:2019-03-22 14:27:22
【问题描述】:

我有一个项目 rootProject,里面有 5 个子项目,都是 gradle 项目。当我从 rootProject 运行 gradle build 时,它将在所有子项目上运行 gradle build。正如我们所知,gradle build 任务将包含多个子任务,例如 clean、compile、test。

我有一个要求,如果我从 rootProject 运行 gradle build,它将在除 subproject5 之外的所有子项目上运行此命令。在 subproject5 上,它应该只跳过构建任务的测试子任务。同时,如果我进入 subproject5 目录并尝试通过 gradle test 命令访问子任务,它应该可以工作。

请帮帮我。

【问题讨论】:

  • 我不能使用这个命令,因为它会跳过所有子项目的测试。该命令必须是 gradle build。我需要在 build.gradle 中添加一些条件。
  • 您通过传递要排除的 任务来使用此命令::subproject5:test。如果 build 任务,在没有传递任何选项的情况下,不应该执行某些事情,那么不应该在标准的 test 任务中完成某些事情,而是在另一个任务中,该构建不依赖于。
  • 我无法更改构建命令,因为它被多人使用。我正在考虑在 rootProject 的 build.gradle 中设置一些条件,以便在从 rootProject 运行 gradle build 时,它应该会拾取并且不会对 subproject5 的 build.gradle 产生任何影响。
  • 您不应该打破既定的标准约定。构建取决于测试。这是一个标准约定。因此,再次强调,如果您希望在执行构建任务时不执行某些内容,则将该内容放在测试任务以外的任务中。

标签: java gradle build


【解决方案1】:

为了控制某个项目的测试任务的运行,请检查传递的参数并使用该参数删除测试任务。以下内容可以在build.gradle文件中使用。

subprojects {
  // Add all other common stuff
  // and as last statement perform the check
  if(project.hasProperty('disableTestForProject5')) {
    project(':project5').tasks.remove(test)
  }
}

现在,如果您想禁用 project5 的测试,您可以以 ./gradlew build -PdisableTestForProject5 运行构建。不传参数则执行测试。

要永久阻止测试执行,只需删除条件并将project(':project5').tasks.remove(test) 作为最后一行放在subprojects 块中。

【讨论】:

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