Java 使用Gradle自动生成gRPC存根文件时出现问题

Java 使用Gradle自动生成gRPC存根文件时出现问题,java,gradle,protocol-buffers,grpc-java,protoc,Java,Gradle,Protocol Buffers,Grpc Java,Protoc,我被要求为一门大学课程实现一些gRPC类,在从一个源原型文件生成java类时遇到了一些问题 首先是一些背景知识:这是一项相当基本的服务,使用一个简单的方法接收id并返回电话和电子邮件。这是原始文件(BuscarData表示获取数据,很抱歉没有翻译!) 我的想法是用gradle插件生成类。我的身材。格雷德尔: plugins { id 'java' id "com.google.protobuf" version '0.8.8' } apply plugin: 'java' gr

我被要求为一门大学课程实现一些gRPC类,在从一个源原型文件生成java类时遇到了一些问题

首先是一些背景知识:这是一项相当基本的服务,使用一个简单的方法接收id并返回电话和电子邮件。这是原始文件(BuscarData表示获取数据,很抱歉没有翻译!)

我的想法是用gradle插件生成类。我的身材。格雷德尔:

plugins {
    id 'java'
    id "com.google.protobuf" version '0.8.8'
}
apply plugin: 'java'

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.11.4'
    implementation 'io.grpc:grpc-netty-shaded:1.29.0'
    implementation 'io.grpc:grpc-protobuf:1.29.0'
    implementation 'io.grpc:grpc-stub:1.29.0'

}

sourceSets {
    main {
        proto {
            srcDir 'src/main/proto'
        }
        java {
            srcDirs 'src/main/java', 'generated-sources/main/java'
        }
    }
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.11.0'
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.29.0'
        }
    }
    generateProtoTasks.generatedFilesBaseDir = 'generated-sources'

    generateProtoTasks {
        all().each { task ->
            // Here you can configure the task
        }
        ofSourceSet('main')

    }
}
据我所知,一切都在那里:grpc和protoc依赖项,以及使protoc能够编译grpc的插件(protoc gen grpc),以及将生成的文件存放在何处。 然而,有两个问题:

  • 生成的源没有标记为source或类似的东西,这意味着它们不能从其他类导入
  • 如果我没有弄错的话,生成的源代码应该生成DataRepoImpl的框架,这样我就可以添加BuscarData所需的代码。然而,事实并非如此。或者我应该创建它,从DataRepo.java扩展而来,但由于问题n°1,我无法测试它
  • 我添加了项目文件结构的屏幕截图:

    正如您所看到的,相当多(如果不是全部的话)的gradle设置是从许多不同的网站复制粘贴和清除的。我希望我足够小心,不要重复任何进口。也有类似的问题,我在那里尝试了解决方案,但没有运气。有一个例子,我知道我必须包括gen grpc插件:

    欢迎提供任何有关其他方面的提示!我不太会问问题,所以我可能在问题的特殊性或问题的目的方面犯了错误

    谢谢

    Franri.

    对于1),插件应该将生成的文件作为java编译任务的输入,即使您没有在
    源集配置中明确添加
    'generated-sources/main/java'
    。版本0.8.8已经有一段时间了,您可以尝试使用较新的版本。您可能遇到的问题可能有一些小的修复

    对于2),您没有向每个
    generateProto
    任务添加
    grpc
    插件。应该是

    generateProtoTasks {
        all().each { task ->
            task.plugins { grpc{} }
        }
        ofSourceSet('main')
    
    }
    
    对于1),插件应该将生成的文件作为java编译任务的输入,即使您没有在
    sourceset
    配置中显式添加
    'generated-sources/main/java'
    。版本0.8.8已经有一段时间了,您可以尝试使用较新的版本。您可能遇到的问题可能有一些小的修复

    对于2),您没有向每个
    generateProto
    任务添加
    grpc
    插件。应该是

    generateProtoTasks {
        all().each { task ->
            task.plugins { grpc{} }
        }
        ofSourceSet('main')
    
    }