我似乎有点鸡/蛋问题。我有Gradle用Java
插件定义的测试任务。我将JUnit类别设置为使用属性运行。我的团队已表示对将在特定类别中运行任务而不必使用-P在命令行上设置属性的任务感兴趣。
我无法想出办法解决这个问题,因为新任务只有在执行时才需要配置test
任务。由于要运行的类别需要是测试任务的输入参数,以确保UP-TO-DATE检查功能正常,因此需要在配置阶段设置它们,并且不能等待执行阶段。
有谁知道如何进行像这样的设置?也许我正在从错误的角度接近它。
编辑1
当前build.gradle
apply plugin: 'java'
def defaultCategory = 'checkin'
test {
def category = (project.hasProperty('category') ? project['category'] : defaultCategory)
inputs.property('category', category)
useJUnit()
options {
includeCategories category
}
}
我想要什么,但不起作用:
apply plugin: 'java'
def defaultCategory = 'checkin'
test {
def category = (project.hasProperty('category') ? project['category'] : defaultCategory)
inputs.property('category', category)
useJUnit()
options {
includeCategories category
}
}
task nightly(dependsOn: 'build') {
defaultCategory = 'nightly'
}
task weekly(dependsOn: 'build') {
defaultCategory = 'weekly'
}
由于两个任务都是配置的,无论它们是否会被运行,它们都变得无用。我无法在执行阶段之前推迟设置defaultCategory值,因为需要配置test
任务的任务输入的值,并且因为该值需要能够运行test
任务,它在build
任务之前运行。
答案 0 :(得分:7)
我不知道我是否称这种解决方案优雅,但事实证明它是有效的:
task nightly(dependsOn: 'build')
test {
useJUnit()
gradle.taskGraph.whenReady {
if (gradle.taskGraph.hasTask(":${project.name}:nightly")) {
options {
includeCategories 'nightly'
}
}
}
}