未解决的参考:protoc - 使用 Gradle + Protocol Buffers 时

Edd*_*Edd 2 protocol-buffers gradle kotlin

我有一个使用 Kotlin DSL 的 gradle 项目

build.gradle.kts

plugins {
    kotlin("jvm") version "1.4.21"
    id("com.google.protobuf") version "0.8.10"
}

group = "schema"
version = "0.0.1-SNAPSHOT"

repositories {
    mavenCentral()
}
protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.0.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

模式.proto

syntax = "proto3";
package schema;

message Message {
  string content = 1;
  string date_time = 2;
}
Run Code Online (Sandbox Code Playgroud)

和项目结构

schema
-src/main/proto/schema.proto
-build.gradle.kts
Run Code Online (Sandbox Code Playgroud)

每当我运行时,gradle build我都会收到错误:

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/x/schema/build.gradle.kts' line: 13

* What went wrong:
Script compilation errors:

   Line 15:      protoc {
        ^ Unresolved reference: protoc

   Line 16:              artifact = "com.google.protobuf:protoc:3.0.0"
         ^ Unresolved reference: artifact

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 8s
Run Code Online (Sandbox Code Playgroud)

我所做的与各种教程不同的唯一一件事是使用 Gradle Kotlin DSL。我究竟做错了什么?

Edd*_*Edd 9

无论出于何种原因这都有效

import com.google.protobuf.gradle.protoc

protobuf {
    protobuf.protoc {
        artifact = "com.google.protobuf:protoc:3.0.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

protobuf必须指定两次介意似乎有点难看


小智 8

我认为这是因为您在 protobuf gradle 插件中引用了单个任务。尝试导入整个包以根据需要使用类型安全的访问器。

import com.google.protobuf.gradle.*
Run Code Online (Sandbox Code Playgroud)