未解决的参考。由于接收器类型不匹配,以下候选者均不适用:在 gradle kotlin dsl 中使用 protobuf 插件时

Raj*_*jan 5 gradle protobuf-java gradle-kotlin-dsl

com.google.protobuf在我的项目中使用 gradle 插件从 proto 文件生成 java 类。下面是我的 build.gradle,它运行良好。


buildscript {
  repositories {
    mavenCentral()
    mavenLocal()
  }
  dependencies {
    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
  }
}
plugins {
    id 'java'
    id 'com.google.protobuf' version '0.8.18'
}
repositories {
    mavenCentral()
    mavenLocal()
}
group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}
dependencies {
    implementation('io.grpc:grpc-netty-shaded:1.45.1')
    implementation('io.grpc:grpc-stub:1.45.1')
    implementation('io.grpc:grpc-protobuf:1.45.1')
    implementation 'javax.annotation:javax.annotation-api:1.3.2'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

test {
    useJUnitPlatform()
}

protobuf {
  protoc {
    artifact = "com.google.protobuf:protoc:3.20.0"
  }
  plugins {
    grpc {
      artifact = 'io.grpc:protoc-gen-grpc-java:1.45.1'
    }
  }
  generateProtoTasks {
    all()*.plugins {
      grpc {}
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在将构建重写为 kotlin dsl,如下所示 -

import com.google.protobuf.gradle.protoc

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
    }
    dependencies {
        classpath ("com.google.protobuf:protobuf-gradle-plugin:0.8.18")
    }
}
plugins {
    java
    id("com.google.protobuf") version "0.8.18"
}
repositories {
    mavenCentral()
    mavenLocal()
    gradlePluginPortal()
}
group = "org.example"
version = "1.0-SNAPSHOT"


dependencies {
    implementation("io.grpc:grpc-netty-shaded:1.45.1")
    implementation("io.grpc:grpc-stub:1.45.1")
    implementation("io.grpc:grpc-protobuf:1.45.1")
//    implementation("org.apache.tomcat:annotations-api:6.0.53")
    implementation("javax.annotation:javax.annotation-api:1.3.2")
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}

tasks.getByName<Test>("test") {
    useJUnitPlatform()
}

protobuf {

    protoc {
        artifact = "com.google.protobuf:protoc:3.20.0"
    }
    plugins {
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:1.45.1"
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,gradle clean compileJava我收到以下错误 -

$ gradle clean 编译Java

配置项目:e:/home/rajkumar/Coding/java/grpc/grpc-complete-course/grpc-gradle-kts-demo/build.gradle.kts:50:15:需要一个元素e:/home/rajkumar/ Coding/java/grpc/grpc-complete-course/grpc-gradle-kts-demo/build.gradle.kts:41:5:未解析的参考。由于接收器类型不匹配,以下候选者均不适用: public fun ProtobufConfigurator.protoc(action: ExecutableLocator.() -> Unit): Unit Defined in com.google.protobuf.gradle e: /home/rajkumar/Coding/java /grpc/grpc-complete-course/grpc-gradle-kts-demo/build.gradle.kts:45:9:未解析的参考:grpc e:/home/rajkumar/Coding/java/grpc/grpc-complete-course/ grpc-gradle-kts-demo/build.gradle.kts:46:13:未解析的参考:工件 e:/home/rajkumar/Coding/java/grpc/grpc-complete-course/grpc-gradle-kts-demo/build .gradle.kts:49:5:未解析的参考:generateProtoTasks e:/home/rajkumar/Coding/java/grpc/grpc-complete-course/grpc-gradle-kts-demo/build.gradle.kts:50:9:未解决的参考。由于接收者类型不匹配,以下候选者都不适用: public inline fun Array<out TypeVariable(T)>.all(predicate: (TypeVariable(T)) -> Boolean): Boolean Defined in kotlin.collections public inline fun BooleanArray .all(predicate: (Boolean) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun ByteArray.all(predicate: (Byte) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun CharArray.all(predicate : (Char) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun CharSequence.all(predicate: (Char) -> Boolean): kotlin.text 中定义的布尔值 public inline fun DoubleArray.all(predicate: (Double) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun FloatArray.all(predicate: (Float) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun IntArray.all(predicate: (Int) -> Boolean) :在 kotlin.collections 中定义的布尔值 public inline fun LongArray.all(predicate: (Long) -> Boolean):在 kotlin.collections 中定义的布尔值 public inline fun ShortArray.all(predicate: (Short) -> Boolean):在 kotlin.collections 中定义的布尔值kotlin.collections public inline fun UByteArray.all(predicate: (UByte) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun UIntArray.all(predicate: (UInt) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun ULongArray.all(predicate: (ULong) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun UShortArray.all(predicate: (UShort) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun Iterable< TypeVariable(T)>.all(predicate: (TypeVariable(T)) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun <K, V> Map<out TypeVariable(K), TypeVariable(V)>.all (谓词: (Map.Entry<TypeVariable(K), TypeVariable(V)>) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun Sequence<TypeVariable(T)>.all(predicate:

失败:构建失败并出现异常。

  • 其中:构建文件'/home/rajkumar/Coding/java/grpc/grpc-complete-course/grpc-gradle-kts-demo/build.gradle.kts'行:50

  • 出了什么问题:脚本编译错误:

    第 50 行:all()*.plugins { ^ 需要一个元素

    第 41 行:protoc { ^ 未解析的引用。由于接收器类型不匹配,以下候选者均不适用: public fun ProtobufConfigurator.protoc(action: ExecutableLocator.() -> Unit): Unit Defined in com.google.protobuf.gradle

    第 45 行:grpc { ^ 未解析的参考:grpc

    第 46 行:artifact = "io.grpc:protoc-gen-grpc-java:1.45.1" ^ 未解析的参考:artifact

    第 49 行:generateProtoTasks { ^ 未解析的参考:generateProtoTasks

    第 50 行:all()*.plugins { ^ 未解析的引用。由于接收者类型不匹配,以下候选者都不适用: public inline fun Array<out TypeVariable(T)>.all(predicate: (TypeVariable(T)) -> Boolean): Boolean Defined in kotlin.collections public inline fun BooleanArray .all(predicate: (Boolean) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun ByteArray.all(predicate: (Byte) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun CharArray.all(predicate : (Char) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun CharSequence.all(predicate: (Char) -> Boolean): kotlin.text 中定义的布尔值 public inline fun DoubleArray.all(predicate: (Double) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun FloatArray.all(predicate: (Float) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun IntArray.all(predicate: (Int) -> Boolean) :在 kotlin.collections 中定义的布尔值 public inline fun LongArray.all(predicate: (Long) -> Boolean):在 kotlin.collections 中定义的布尔值 public inline fun ShortArray.all(predicate: (Short) -> Boolean):在 kotlin.collections 中定义的布尔值kotlin.collections public inline fun UByteArray.all(predicate: (UByte) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun UIntArray.all(predicate: (UInt) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun ULongArray.all(predicate: (ULong) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun UShortArray.all(predicate: (UShort) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun Iterable< TypeVariable(T)>.all(predicate: (TypeVariable(T)) -> Boolean): kotlin.collections 中定义的布尔值 public inline fun <K, V> Map<out TypeVariable(K), TypeVariable(V)>.all (predicate: (Map.Entry<TypeVariable(K), TypeVariable(V)>) -> Boolean):在 kotlin.collections 中定义的布尔值 public inline fun Sequence<TypeVariable(T)>.all(predicate: (TypeVariable(T)) ) -> Boolean): kotlin.sequences 中定义的布尔值 public inline fun ComponentMetadataHandler.all(): org.gradle.kotlin.dsl 中定义的 ComponentMetadataHandler public inline fun ComponentMetadataHandler.all(rule: KClass): org.gradle 中定义的 ComponentMetadataHandler。 kotlin.dsl public inline fun ComponentMetadataHandler.all(rule: KClass, configureAction: Action): org.gradle.kotlin.dsl 中定义的 ComponentMetadataHandler public inline fun ComponentMetadataHandler.all(configureAction: Action): org.gradle.kotlin 中定义的 ComponentMetadataHandler。 DSL

    第 51 行:grpc {} ^ 未解析的引用:grpc

7 个错误

  • 尝试:

使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

2秒内构建失败

我该如何修复该错误?我不知道如何在 kotlin dsl 中做到这一点?