首页 > 解决方案 > gRPC 生成的 java 文件被重复或重新生成:类 ClassNameGrpc 是公共的,应在名为 ClassNameGrpc 的文件中声明

问题描述

我创建了一个带有 2 个模块的 gradle java 项目:

  1. grpc客户端模块
  2. grpc服务器模块

当我构建它们时,由于某种原因,grpc 和 protobuf 文件不止一次生成。第二个文件生成后缀为“2”,因此引发错误,如下面的屏幕截图所示。

gradle 文件如下,在客户端和服务器中是一样的。

apply plugin: 'java'
apply plugin: 'com.google.protobuf'

repositories {
mavenCentral()
}

def grpcVersion = '1.24.1'

dependencies {
compile "io.grpc:grpc-netty:${grpcVersion}"
compile "io.grpc:grpc-protobuf:${grpcVersion}"
compile "io.grpc:grpc-stub:${grpcVersion}"
compile 'com.google.protobuf:protobuf-java:3.9.2'
}

buildscript {
repositories {
    mavenCentral()
}
dependencies {

    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.10'
}
}

protobuf {
protoc {
    artifact = 'com.google.protobuf:protoc:3.9.2'
}
plugins {
    grpc {
        artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
    }
}
generateProtoTasks {
    all()*.plugins {
        grpc {}
    }
}
}


sourceSets {
main {
    java {
        srcDirs 'build/generated/source/proto/main/grpc'
        srcDirs 'build/generated/source/proto/main/java'
    }
}
}

jar {
manifest {
    attributes "Main-Class": "ecommerce.ecommerce.OrderMgtServer"
}
from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}

// Generate IntelliJ IDEA's .idea & .iml project files
apply plugin: 'idea'

// Provide convenience executables for trying out the examples.
apply plugin: 'application'

startScripts.enabled = false

在此处输入图像描述

标签: build.gradlegrpc-java

解决方案


只用一个sourceSets {main { java·添加java插件和protobuf你版本的插件build.gradle

plugins {
    id 'java'
    id 'com.google.protobuf' version '0.8.10'
    id 'idea'
}
dependencies {
    implementation "io.grpc:grpc-netty-shaded:$grpc_version"
    implementation "io.grpc:grpc-protobuf:$grpc_version"
    implementation "io.grpc:grpc-stub:$grpc_version"
    implementation "io.grpc:grpc-services:$grpc_version" // reflection
}
sourceSets.main.java.srcDir new File(buildDir, 'generated/source')
idea {
    module {
        // Marks the already(!) added srcDir as "generated"
        generatedSourceDirs += file('build/generated/source')
    }
}

编辑后build.gradle执行 atask -> cleantask -> generateProtobuff. 我认为你可以用它来解决你的错误。关于dependencies.compile我不确定它是否会影响。但我正在使用dependencies.implementation.


推荐阅读