2015-05-28 90 views
0

我看起来有点鸡/蛋问题。我有Gradle用Java插件定义的测试任务。我将JUnit类别设置为使用属性运行。我的团队已经表达了对将运行特定类别任务的任务的兴趣,而不必使用-P在命令行上设置属性。根据要执行的任务配置Gradle任务

我不能想出办法解决这个问题,因为新任务需要配置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任务的任务输入,并且需要该值能够运行在build任务之前运行的test任务。

+0

能否请您提供展示,你有问题的示例脚本? – Opal

回答

4

我不知道如果我把这个解决方案优雅,但它已被证明是有效的:

task nightly(dependsOn: 'build') 

test { 
    useJUnit() 

    gradle.taskGraph.whenReady { 
     if (gradle.taskGraph.hasTask(":${project.name}:nightly")) { 
      options { 
       includeCategories 'nightly' 
      } 
     } 
    } 
}