Gradle从完整版本中排除特定子项目

Pad*_*ddy 17 multi-project gradle


在我们的Gradle项目中,我们想要为功能测试添加一个新模块,该模块需要能够访问其他子项目的依赖项,但仍然不能作为完整项目构建的一部分运行.如果我试试这个,它仍然会被构建:

def javaProjects() {
   return subprojects.findAll { it.name != 'functional-tests' }
}

configure(javaProjects()) {
   ...
}

project(':functional-tests') {
    ....
}
Run Code Online (Sandbox Code Playgroud)

即使我将功能测试版本移动到它自己的单独的build.gradle文件,结果也是一样的.有人可以指出如何实现这一目标吗?

Sco*_*ott 29

我找到了一个更好的解决方案,可以在命令行或构建文件中排除功能测试.

例如,要运行除功能测试之外的所有测试,请运行:

$ gradle check -x :functional-tests:check
Run Code Online (Sandbox Code Playgroud)

然后在构建项目时,您可以让子项目构建,但不要运行它们的测试.

$ gradle clean assemble -x :functional-tests:check
Run Code Online (Sandbox Code Playgroud)

除非设置了属性,否则更好的选择是禁用构建文件中的功能测试.例如,在你的build.gradle添加中:

project('functional-tests') {
    test {
        onlyIf {
            project.hasProperty("functionalTests")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,除非您指定特定的构建属性,否则始终会跳过功能测试:

$ gradle check
$ gradle -PfunctionalTests check
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


Bru*_*uce 13

我这样做:

//for all sub projects
subprojects {
    if (it.name != 'project name') {
        //do something
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以排除subprojects.

您也可以在allprojects或 中使用它project


小智 7

您不能排除子项目,但可以禁用子项目任务:

gradle.taskGraph.whenReady {
  gradle.taskGraph.allTasks.each {
    if(it.project == project) {
      it.onlyIf { false }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Opa*_*pal 6

据我所知,除非包含在内,否则无法停用排除项目.因此,它可以通过以下方式完成:settings.gradlesettings.gradle

include 'p1', 'p2', 'p3'

if (any_condition_here) {
   include 'functional-tests'
}
Run Code Online (Sandbox Code Playgroud)

它需要额外的检查build.gradle- 如果包含项目,则配置项目.

我的头脑还有-a命令行开关,请看这里.也许它可能会有所帮助.