阅读gradle脚本并找到其中定义的任务

阅读gradle脚本并找到其中定义的任务,gradle,Gradle,我有一个要求,gradle脚本(或gradle插件)必须解析gradle文件并打印特定类型的所有任务;我尝试引用gradle工具api,但没有成功 以下是我尝试过的: ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File(System.env.REPO_ROOT)).connect() try { BuildEnvironment environment = c

我有一个要求,gradle脚本(或gradle插件)必须解析gradle文件并打印特定类型的所有任务;我尝试引用gradle工具api,但没有成功

以下是我尝试过的:

ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File(System.env.REPO_ROOT)).connect()
try {
    BuildEnvironment environment = connection.model(BuildEnvironment.class).get()
    connection.model(GradleProject.class).get().getTasks().each {
        if (it instanceof EMTest) {
            println it
        }
    }
} finally {
    connection.close()
}
这将打印当前build.gradle中的任务列表,这是预期的,因为我没有指定目标gradle文件

当我试图用下面的代码运行(而不是在其中打印/查找任务)时。它起作用了

ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File(System.env.REPO_ROOT)).connect()
try {
    BuildEnvironment environment = connection.model(BuildEnvironment.class).get()
    def build = connection.newBuild()
    /* This is where the gradle script location is provided */
    build.withArguments("--continue", "-b", System.env.REPO_ROOT + "/tests/suites/${project.lrgs}.gradle",
            "-PlrgName=${project.lrgs}", "-PlrgMetadataLoc=${lrgMetadataLoc}")
    build.forTasks(project.lrgs)
    build.setStandardOutput(System.out)
    build.run()
} finally {
    connection.close()
}

我检查了gradle工具api,但没有成功。请帮忙

工具API允许外部工具(如IDE)与Gradle构建交互。Gradle构建脚本或插件只需在
项目上迭代即可。任务

也许使用GradleBuild就可以了?从和60.4。从生成运行另一个Gradle生成

在你的情况下

task othertasks(type: GradleBuild) {
    buildFile = 'other.gradle'
    tasks = ['tasks']
}

当它在同一个梯度文件中时,表示同意。我的需求类似于:Run:gradle runSuite-PtestScriptFile=foo这将在build.gradle中运行runSuite任务;但runSuite必须在“foo.gradle”中运行MyTest类型的所有任务(由项目属性提供)。MyTest是一种自定义测试任务类型,用于运行自定义gradle插件中定义的perl脚本/shell脚本。这将打印other.gradle的所有任务。我的要求是从other.gradle查询特定类型的任务并打印/运行它们。你能为此创建一个特定的任务吗?实际上,这就是我当前的other.gradle的结构。例如,如果它有两个EMTest类型的任务,那么另一个任务只是将这些任务标记为dependsOn。然后从我的build.gradle运行other.gradle的这个特定任务,但我试图看看gradle是否提供了一种读取other.gradle并查询EMTest类型的任务的方法,这样就不需要额外的特殊任务了。我想加入dependsOn,将不得不以某种方式操纵DAG。在afterEvaluate或其他什么的,但这将无法运行GradleBuild事先,所以我不知道如何做。你考虑过进口另一个吗,格雷德尔?像apply from:file(“$rootDir/。/otherproject/build.gradle”)一样,我猜你对最后一个建议也感到非常痛苦:)