首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gradle Tooling中将varargs作为Groovy中的第二个参数传递

在Gradle Tooling中将varargs作为Groovy中的第二个参数传递
EN

Stack Overflow用户
提问于 2016-11-07 10:07:30
回答 1查看 249关注 0票数 0

我正在尝试执行Gradle Tooling,但是我无法调用addProgressListner()方法,因为我在编译过程中遇到了令人惊讶的问题:

代码语言:javascript
复制
buildscript {
    repositories {
        maven { url 'https://repo.gradle.org/gradle/libs-releases' }
    }

    dependencies {
        classpath "org.gradle:gradle-tooling-api:3.1"
        classpath 'org.slf4j:slf4j-simple:1.7.10'
    }
}

ext {
    GRADLE_PROJECT_HOME = '...'
}


import org.gradle.tooling.*
import org.gradle.tooling.events.OperationType

task testGradleToolingAPI {
    doLast {
        ProjectConnection projectConnection = GradleConnector.newConnector()
                                                             .forProjectDirectory(GRADLE_PROJECT_HOME as File)
                                                             .connect()

        def operationTypes = [OperationType.TASK] as OperationType[]
        println "operationTypes.class: ${operationTypes.class}"

        projectConnection.newBuild()
                         .addProgressListener(new ApolloBuildProgressListener(), operationTypes)
                         .run()

        finally {
            projectConnection.close()
        }
    }
}

class ApolloBuildProgressListener implements ProgressListener {
    @Override
    void statusChanged(ProgressEvent event) {
        println "Progress event: ${event.description}"
    }
}

编译失败,因为vararg不能正确识别

代码语言:javascript
复制
operationTypes.class: class [Lorg.gradle.tooling.events.OperationType;
:testGradleToolingAPI FAILED

FAILURE: Build failed with an exception.

* Where:
Build file '/home/martin/devel/tmp/gradle-tooling-api/build.gradle' line: 36

* What went wrong:
Execution failed for task ':testGradleToolingAPI'.
> No signature of method: org.gradle.tooling.internal.consumer.DefaultBuildLauncher.addProgressListener() is applicable for argument types: (ApolloBuildProgressListener, [Lorg.gradle.tooling.events.OperationType;) values: [ApolloBuildProgressListener@7c2dfa2, [TASK]]
  Possible solutions: addProgressListener(org.gradle.tooling.events.ProgressListener, [Lorg.gradle.tooling.events.OperationType;), addProgressListener(org.gradle.tooling.ProgressListener), addProgressListener(org.gradle.tooling.events.ProgressListener), addProgressListener(org.gradle.tooling.events.ProgressListener, java.util.Set)

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 12:43:33

我猜ApolloBuildProgressListener正在实现org.gradle.tooling.ProgressListener,而它应该是org.gradle.tooling.events.ProgressListener。试试这个:

代码语言:javascript
复制
class ApolloBuildProgressListener implements org.gradle.tooling.events.ProgressListener {
   ...
}

注意,BuildLauncher有四个addProgressListener(...)方法。一个接受org.gradle.tooling.ProgressListener,另三个接受org.gradle.tooling.events.ProgressListener

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40462501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档