Gradle:如何配置buildSrc或跳过主项目的测试?

时间:2014-01-03 05:30:42

标签: groovy junit gradle build.gradle

我的buildSrc构建中有一些相当长的测试,我有时想在开发过程中跳过这些测试,以查看模板更改的效果。它是一个报告生成器,有时我只是想调整模板而不必更新所有测试;然后,当我对输出感到满意时,我会更新它们。

我能够使用以下配置在buildSrc build.gradle中实现跳过测试:

test {
    // skip all tests if gradle run with -Pnotests
    try { if (project.ext.notests != null)
        println "skipping tests"
        exclude '**'
    } catch (MissingPropertyException e) {}
}

(如果您有更好的方法来检测可选参数,我很乐意看到它)

但是,这并不适用于主要的gradle项目。我已经尝试了所有我能想到的尝试通过配置传递参数,没有设置环境变量,但我怀疑这也会有用。

总的来说,我发现无法从主项目中配置buildSrc。我找不到任何方法来获取变量,例如project.ext.foo或ext.foo,也没有办法配置buildSrc'项目'因为main build.gradle中没有任何部分。它就像它存在于一个独立的岛屿上。我试过了:

  • project.ext.notests = true
  • 在主
  • 中测试{...}
  • allprojects {test {...}}
  • 子项目{test {...}}
  • 依赖关系{test {...}}
  • buildscript {test {...}}

有没有解决方法,或者我是否必须重构整个项目以将报告代码移动到其他地方,然后我可以配置它并跳过测试?

提前致谢。

2 个答案:

答案 0 :(得分:2)

buildSrc是一个单独的构建(不是项目),我不知道在触发主构建时影响其执行的方法。 (请注意,构建buildSrc是评估主构建的构建脚本的先决条件。)我能想到的一些解决方案:

  • 根据需要无条件禁用buildSrc次测试(例如,在test.disabled = true中设置buildSrc/build.gradle
  • buildSrc分解为单独的构建
  • 更改测试以使其对模板更改不敏感
  • 将对模板更改敏感的测试移动到仅手动触发的单独Test任务中

PS:从命令行跳过构建测试的最简单方法是-x test。可以使用foo检测是否存在项目属性project.hasProperty("foo")

答案 1 :(得分:1)

我尝试了您关于环境变量的想法,并且它确实起作用:

def skipTests = Boolean.parseBoolean(System.env['BUILDSRC_SKIP_TESTS'])

test {
  enabled = !skipTests
  // ... other settings here ...
}

(在Gradle 4.9中对此进行了测试。)

也可以使用这样的变量来禁用其他检查,例如:

tasks.findAll { it.name.startsWith('findbugs') || it.name.startsWith('checkstyle') }
  .each { it.enabled = !skipTests }