1

我想从 Gradle Tooling 运行的任务中获取结果。我定义了 ResultHandler,但在方法 onComplete(Object result) 中我得到空值。输入 gradle cR 后,我得到以下输出:

:returnString UP-TO-DATE
BUILD SUCCESSFUL
Total time: 0.98 secs
Result received: null
:checkResult UP-TO-DATE

如何从我的任务“returnString()”中获得结果。这是我的 build.gradle:

import org.gradle.tooling.*

apply plugin: 'groovy'

dependencies {  
    compile 'org.codehaus.groovy:groovy-all:2.3.3'
}

task returnString() {
    return "STRING!"
}

task checkResult() <<{
    GradleConnector connector = GradleConnector.newConnector();       
    connector.forProjectDirectory(new File(".")); 
    ProjectConnection connection = connector.connect();
    try {
        // Configure the build
        BuildLauncher launcher = connection.newBuild();
        launcher.forTasks("returnString");
        // Run the build
        ResultLoader resultHandler =  new ResultLoader()
        launcher.run(resultHandler);            
    } finally {
        // Clean up
        connection.close();
    } 
}

class ResultLoader implements ResultHandler<Object>{

    void onComplete(Object result){
        println "Result received: "+ result.toString()
    }
    void onFailure(GradleConnectionException failure){
        println failure
    }
}
4

1 回答 1

1

您的操作已成功完成并通知 onComplete() 回调。我不确定你期望收到什么。如果您运行其中一种 getModel() 方法或者如果您要求执行 BuildAction,将会有一个结果值。LongRunningOperation 用于运行所有这三个操作:构建、模型检索、操作(http://www.gradle.org/docs/current/javadoc/org/gradle/tooling/LongRunningOperation.html)。

顺便说一句:我不清楚您为什么要从已经运行的版本开始另一个版本,但这与您的问题无关。

于 2014-09-12T11:48:22.953 回答