我想从Gradle Tooling运行的任务中获得结果。我定义了ResultHandler,但是在方法onComplete(Object result)中我获得了null值。输入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
}
}
答案 0 :(得分:1)
您的操作已成功完成,并且已通知onComplete()回调。我不确定你期望收到什么。如果运行其中一个getModel()方法或者要求执行BuildAction,则会有结果值。 LongRunningOperation用于运行所有这三个操作:构建,模型检索,操作(http://www.gradle.org/docs/current/javadoc/org/gradle/tooling/LongRunningOperation.html)。
顺便说一句:我不清楚为什么你从已经运行的那个开始另一个构建,但它与你的问题无关。