gradle tasks.withType找不到其他文件中定义的任务

gradle tasks.withType找不到其他文件中定义的任务,gradle,Gradle,我有两个gradle文件,setup.gradle和tests.gradle;每个都有两个自定义类型“EMTest”的梯度任务 test.gradle将“setup.gradle”应用为从“setup.gradle”应用 我想配置EMTest类型的所有任务;为此,我在tests.gradle末尾添加了以下代码 tasks.withType(EMTest) { println it.name } 但这只打印测试中任务的名称 当我跑的时候 tasks.all { println

我有两个gradle文件,setup.gradle和tests.gradle;每个都有两个自定义类型“EMTest”的梯度任务

test.gradle将“setup.gradle”应用为从“setup.gradle”应用

我想配置EMTest类型的所有任务;为此,我在tests.gradle末尾添加了以下代码

tasks.withType(EMTest) {
    println it.name
}
但这只打印测试中任务的名称

当我跑的时候

tasks.all { 
    println it.name + " " + it.class
}
但是,它列出了setup.gradle中定义的任务名称和EMTest_修饰的类型(适用于所有4种类型)

注意:我使用Gradle1.11(不控制升级);这里的问题是什么

更新日期:2009年6月9日 以下是主文件:

apply plugin: 'java';
apply plugin: 'maven'
apply from: 'emcpsrvs_3n_setup.gradle'

buildscript {
    repositories {
        maven {
            url = "${artifactory_contextUrl}/repo" }
    }
    dependencies {

        classpath group:"com.mycompany.myprod.mymodule", name: "TestInfraPlugin", version: "${testinfraVersion}", transitive: true
        classpath group: 'org.codehaus.jackson', name: 'jackson-mapper-asl', version:'1.9.13'
        classpath group: 'com.mycompany.myprod', name: 'common',version:'0.1'
        classpath group: 'org.codehaus.jackson', name: 'jackson-core-asl', version:'1.9.13'
        classpath group: 'com.oracle.weblogic',name: 'jettison-1.1', version: '12.1.2-0-0'
    }
}

repositories {
    /* To check if the jar is available in local maven repository */
    mavenLocal()
    maven {
        url = "${artifactory_contextUrl}/repo"
    }
}

apply plugin: 'TestInfraPlugin'
import com.mycompany.myprod.gradle.testinfra.tasks.EMTest;

repositories {
    maven {
        url = "${artifactory_contextUrl}/repo"
    }
}
dependencies {
   testConfig group:'com.mycompany.myprod',name:'ui-integ-tests', version: '1.+'
   testConfig group: 'com.mycompany.myprod', name: 'emaas-platform-tenant-sdk', version: '0.1+'
  }

task unitTests(type: EMTest){
}

// Three tests are disabled due to JIRA-900
task tenantMgmtUITests(type: EMTest,dependsOn: [cleanSmall_deploy_3n_block,small_deploy_3n_block]) {
    useWebdriver = true
    small_deploy_3n_block.mustRunAfter ([cleanSmall_deploy_3n_block])

    options.suiteXmlBuilder().suite('parallel': 'none','name': 'TenantManagementUI') {
        test('name': 'TenantManagementUI') {
            classes([:]) {

                'class'('name': 'com.mycompany.package.MyTest')
            }
        }
    }
}

small_deploy_3n_cleanup.mustRunAfter ([tenantMgmtUITests])
task emcpsrvs_tenant_mgmt_ui_3n(dependsOn: [tenantMgmtUITests,small_deploy_3n_cleanup])
这是上面应用的“emcpsrvs_3n_setup.gradle”

buildscript {
    repositories {
        maven {
            url = "${artifactory_contextUrl}/repo"
        }
    }
    dependencies {
        classpath group: 'com.mycompany.myprod.emdi', name: 'TestInfraPlugin', version: "${testinfraVersion}", transitive: true
    }
}

apply plugin: 'TestInfraPlugin'
repositories {
    maven {
        url = "${artifactory_contextUrl}/repo"
    }
}

import com.mycompany.myprod.gradle.testinfra.tasks.EMTest;

ext.integDeployVersion='1.1+'
dependencies {
    testConfig group: 'com.mycompany.myprod.test', name: 'smalldeployment', version: "${integDeployVersion}"
}

/* Setup EMaaS Small Deployment */
task small_deploy_3n_block(type: EMTest) {
    outputs.upToDateWhen { false }
    onlyIf {!System.env.SMALLDEPLOY_IGNORESETUP}
    options.suiteXmlBuilder().suite('name': 'setup_3n_env') {
        test('name': 'emaas_setup_small_deploy') {
            classes([:]) {
                'class'('name': 'mycompany.sysman.test.emaas.integ.EmaasSmallDeploy3n') {
                    methods([:]) {
                        'include' ('name': 'setupEmaasSmallDeploy')
                    }
                }
            }
        }
    }
    useWebdriver = true
    useRestAssured = true
}

/* Cleanup EMaaS Small Deployment */
task small_deploy_3n_cleanup(type: EMTest) {
    onlyIf {!System.env.SMALLDEPLOY_IGNORESETUP}
    options.suiteXmlBuilder().suite('name': 'setup_3n_env') {
        test('name': 'emaas_setup_small_deploy') {
            classes([:]) {
                'class'('name': 'mycompany.sysman.test.emaas.integ.EmaasSmallDeploy3n') {
                    methods([:]) {
                        'include' ('name': 'logCollectionAndPostCleanup')
                    }
                }
            }
        }
    }
   mustRunAfter ([small_deploy_3n_block])
}
最后是TestInfraPlugin.groovy(gradle插件)的代码片段:

}

afterEvaluate{}
block在做什么: 它检查是否存在类型为
EMTest
的任务,以及是否存在用于提取配置的任务(名为
testConfig
)。此提取任务作为对类型为
EMTest
的所有任务的依赖项添加,以便提取任务在运行任何其他任务之前作为第一个任务运行

发生了什么事
extractTestClasses
任务仅作为依赖项添加到两个任务
unitTests
tenantMgmtUITests
,因此在
extractTestClasses
导致安装失败之前执行
小部署块
,这反过来会导致测试失败。

当您引用没有对象的任务时,它会隐式使用
project.tasks。

tasks.withType(EMTest) {
    println it.name
}
这就是为什么您只能从当前项目中获取任务

要包括您可以使用的所有项目,请执行以下操作:

allprojects {
   tasks.withType(EMTest) { println it.name }
}
在这个闭包中,您引用的是
it.tasks
,其中
it
在每个项目上循环

这不会像预期的那样工作,因为Gradle此时可能没有加载所有的子项目,也没有达到完整配置阶段中找到的每个任务定义。因此,您必须定义要在完全评估所有项目后运行的闭包:

allprojects {
   afterEvaluate {
      tasks.withType(EMTest) { println it.name }
   }
}

当您引用没有对象的任务时,它隐式地使用
project.tasks.

tasks.withType(EMTest) {
    println it.name
}
这就是为什么您只能从当前项目中获取任务

要包括您可以使用的所有项目,请执行以下操作:

allprojects {
   tasks.withType(EMTest) { println it.name }
}
在这个闭包中,您引用的是
it.tasks
,其中
it
在每个项目上循环

这不会像预期的那样工作,因为Gradle此时可能没有加载所有的子项目,也没有达到完整配置阶段中找到的每个任务定义。因此,您必须定义要在完全评估所有项目后运行的闭包:

allprojects {
   afterEvaluate {
      tasks.withType(EMTest) { println it.name }
   }
}

你能提供一个重现问题的例子吗?你能提供一个重现问题的例子吗?