没有测试的Gradle构建

Dav*_*ave 590 gradle

我想在gradle build不执行单元测试的情况下执行.我试过了:

$ gradle -Dskip.tests build
Run Code Online (Sandbox Code Playgroud)

这似乎没有做任何事情.我可以使用其他命令吗?

c_m*_*ker 1150

您应该使用-x排除任何任务的命令行参数.

尝试:

gradle build -x test 
Run Code Online (Sandbox Code Playgroud)

更新:

彼得评论中的链接发生了变化.这里是摇篮用户指南

  • 这是正确的答案.'gradle assemble'也会遗漏许多其他任务.请参阅此[图表](http://gradle.org/latest/docs/userguide/userguide_single.html#N119C7)以了解相关信息.对于典型的现实生活版本,"gradle assemble"将遗漏更多任务. (42认同)
  • 来自@PeterNiederwieser的链接不再有效.可能他指的是这个图:http://gradle.org/docs/current/userguide/img/javaPluginTasks.png (13认同)
  • 虽然你可能需要添加例如`-x integTest`等等,所以不像Maven的毯子`-DskipTests那样方便. (8认同)

Emi*_*Sit 96

尝试:

gradle assemble
Run Code Online (Sandbox Code Playgroud)

要列出项目的所有可用任务,请尝试:

gradle tasks
Run Code Online (Sandbox Code Playgroud)

更新:

这看起来似乎不是最正确的答案,但请仔细阅读gradle tasks输出或文档.

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
Run Code Online (Sandbox Code Playgroud)

  • 作为一个额外的提示,如果您正在调试单元测试:`gradle assemble`将不会编译主文件.如果您正在修复单元测试,那么您需要`gradle assemble testClasses` - 我认为构建任务命名非常混乱. (7认同)

Dav*_*ick 32

接受的答案是正确的答案.

OTOH,我之前解决这个问题的方法是将以下内容添加到所有项目中:

test.onlyIf { ! Boolean.getBoolean('skip.tests') }
Run Code Online (Sandbox Code Playgroud)

运行构建,-Dskip.tests=true将跳过所有测试任务.

  • 对我来说,这仍然是唯一的工作选项,因为-x测试似乎只适用于启动项目,而不适用于多项目构建中的依赖项(在gradle 2.1上测试).将test.onlyif ...放在root build.gradle中的configure(subprojects.findAll {javaProjects.contains(it.name)}){}块中,它将适用于所有项目. (3认同)

Sah*_*bra 22

gradle 中的每个操作都是 a task,也是test。要从taskgradle run 中排除 a,您可以使用该选项--exclude-task或其简写形式,-x后跟需要排除的任务名称。例子:

gradle build -x test
Run Code Online (Sandbox Code Playgroud)

-x应对所有需要排除的任务重复该选项。

如果文件中不同类型的测试有不同的任务build.gradle,那么您需要跳过所有执行测试的任务。假设您有一个test执行单元测试的任务和一个testFunctional执行功能测试的任务。在这种情况下,您可以排除所有测试,如下所示:

gradle build -x test -x testFunctional
Run Code Online (Sandbox Code Playgroud)


Gui*_* He 13

您可以将以下行添加到build.gradle,以**/*排除所有测试。

test {
    exclude '**/*'
}
Run Code Online (Sandbox Code Playgroud)


Fed*_*zza 7

使用-x test跳过测试执行,但这也不包括测试代码编译。

gradle build -x test 
Run Code Online (Sandbox Code Playgroud)

在我们的例子中,我们有一个 CI/CD 过程,其中一个目标是编译,下一个目标是测试(构建 -> 测试)。

因此,对于我们的第一个Build目标,我们希望确保整个项目编译良好。为此,我们使用了:

./gradlew build testClasses -x test
Run Code Online (Sandbox Code Playgroud)

在下一个目标上,我们只是执行测试。


Sug*_*lai 5

参考

要从 gradle 中排除任何任务,请使用-x命令行选项。请参阅下面的示例

task compile << {
    println 'task compile'
}

task compileTest(dependsOn: compile) << {
    println 'compile test'
}

task runningTest(dependsOn: compileTest) << {
    println 'running test'
}
task dist(dependsOn:[runningTest, compileTest, compile]) << {
    println 'running distribution job'
}
Run Code Online (Sandbox Code Playgroud)

输出:gradle -q dist -x runningTest

task compile
compile test
running distribution job
Run Code Online (Sandbox Code Playgroud)

希望这能为您提供基本的


小智 5

在项目中禁用测试任务的不同方法是:

tasks.withType(Test) {enabled = false}
Run Code Online (Sandbox Code Playgroud)

如果您想在一个项目(或一组项目)中禁用测试,有时需要这种行为。

这种方式适用于所有类型的测试任务,而不仅仅是 Java“测试”。此外,这种方式是安全的。这就是我的意思,让我们说:您有一组不同语言的项目:如果我们尝试在 main 中添加这种记录build.gradle

 subprojects{
 .......
 tests.enabled=false
 .......
}
Run Code Online (Sandbox Code Playgroud)

如果我们没有称为测试的任务,我们将在项目中失败