在我们的Gradle项目中,我们想要为功能测试添加一个新模块,该模块需要能够访问其他子项目的依赖项,但仍然不能作为完整项目构建的一部分运行。如果我试试这个,它仍然会被构建:
def javaProjects() {
return subprojects.findAll { it.name != 'functional-tests' }
}
configure(javaProjects()) {
...
}
project(':functional-tests') {
....
}
即使我将功能测试版本移动到它自己的单独build.gradle文件,结果也是一样的。有人能指出如何实现这个目标吗?
答案 0 :(得分:22)
我找到了一个更好的解决方案,可以在命令行或构建文件中排除功能测试。
例如,要运行除功能测试之外的所有测试,请运行:
$ gradle check -x :functional-tests:check
然后在构建项目时,您可以让子项目构建,但不要将其测试排除在运行之外。
$ gradle clean assemble -x :functional-tests:check
更好的选择是在构建文件中禁用功能测试,除非设置了属性。例如,在build.gradle
中添加:
project('functional-tests') {
test {
onlyIf {
project.hasProperty("functionalTests")
}
}
}
这样,除非指定特定的构建属性,否则总是跳过功能测试:
$ gradle check
$ gradle -PfunctionalTests check
希望有所帮助!
答案 1 :(得分:5)
据我所知,无法停用或排除项目,因为已包含项目{{1 }}。因此,它可以在settings.gradle
中以下列方式完成:
settings.gradle
如果要包含该项目,则需要在include 'p1', 'p2', 'p3'
if (any_condition_here) {
include 'functional-tests'
}
中进行额外检查。
我的头脑是build.gradle
命令行开关,请参阅here。也许它可能会有所帮助。
答案 2 :(得分:4)
您不能排除子项目,但可以禁用子项目任务:
gradle.taskGraph.whenReady {
gradle.taskGraph.allTasks.each {
if(it.project == project) {
it.onlyIf { false }
}
}
}
答案 3 :(得分:3)
我这样做:
//for all sub projects
subprojects {
if (it.name != 'project name') {
//do something
}
}
通过这种方式,我可以在subprojects
中排除一些特殊项目。
您也可以在allprojects
或project
中使用它。