读取gradle脚本并查找其中定义的任务

时间:2014-11-04 01:39:59

标签: gradle

我有一个要求,即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但没有成功。请帮忙。

2 个答案:

答案 0 :(得分:1)

工具API允许外部工具(例如IDE)与Gradle构建进行交互。 Gradle构建脚本或插件可以迭代project.tasks

答案 1 :(得分:0)

只是使用GradleBuild会起作用吗?来自http://www.gradle.org/docs/current/userguide/organizing_build_logic.html 60.4。从构建中运行另一个Gradle构建

在你的情况下,

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