elysia_nice 2024-05-04 21:23 采纳率: 80%
浏览 13

gradle grpc配置

img

命令:gradle build
利用gradle配置 grpc生成proto文件时发生如下报错
版本:gradle 8.7
java21
ubuntu 22.04 lts

build.gradle

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

repositories {
    mavenCentral()
}

def grpcVersion = '1.39.0'

dependencies {
    implementation "io.grpc:grpc-netty:${grpcVersion}"
    implementation "io.grpc:grpc-protobuf:${grpcVersion}"
    implementation "io.grpc:grpc-stub:${grpcVersion}"
    implementation 'com.google.protobuf:protobuf-java:3.17.2'
    implementation 'javax.annotation:javax.annotation-api:1.3.2'
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.17'
    }
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.17.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.ProductInfoServer"
    }
    from {
        configurations.implementation.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

目录结构

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-04 21:23
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,您的项目在执行gradle build命令时遇到了错误。这个问题通常与Gradle的依赖管理有关。为了解决这个问题,我们需要对build.gradle文件进行一些调整。以下是修改后的build.gradle文件内容:

    plugins {
        id 'java'
        id 'com.google.protobuf' version '0.8.17'
    }
    
    group 'your.group.id'
    version '1.0-SNAPSHOT'
    
    repositories {
        mavenCentral()
    }
    
    ext.grpcVersion = '1.39.0'
    
    dependencies {
        implementation "io.grpc:grpc-netty-shaded:${grpcVersion}"
        implementation "io.grpc:grpc-protobuf:${grpcVersion}"
        implementation "io.grpc:grpc-stub:${grpcVersion}"
        implementation 'com.google.protobuf:protobuf-java:3.17.2'
        annotationProcessor 'com.google.protobuf:protobuf-gradle-plugin:0.8.17'
    }
    
    protobuf {
        protoc {
            artifact = 'com.google.protobuf:protoc:3.17.2'
        }
        plugins {
            grpc {
                artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
            }
        }
        generateProtoTasks {
            all().each { task ->
                task.builtins {
                    java { option 'lite' }
                }
                task.plugins {
                    grpc {
                        option 'lite'
                    }
                }
            }
        }
    }
    
    sourceSets {
        main {
            java {
                srcDirs 'src/main/java', 'build/generated/source/proto/main/java'
            }
        }
    }
    
    jar {
        manifest {
            attributes 'Main-Class': 'ecommerce.ProductInfoServer'
        }
        from {
            configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        }
    }
    
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
    
    task run(type: JavaExec) {
        main = 'ecommerce.ProductInfoServer'
        classpath = sourceSets.main.runtimeClasspath
    }
    
    idea {
        module {
            inheritOutputDirs = false
            outputDir = sourceSets.main.output.classesDir
        }
    }
    

    请注意以下更改:

    1. 使用 id 'java' 替换 apply plugin: 'java'
    2. buildscript 部分的 classpath 行替换为 plugins {} 块,并且移除 buildscript 区块。
    3. dependencies 中的 implementation 'com.google.protobuf:protobuf-java:3.17.2' 改为 annotationProcessor 'com.google.protobuf:protobuf-gradle-plugin:0.8.17'。这样Gradle会在编译阶段处理protobuf。
    4. 添加 tasks.withType(JavaCompile) { ... } 配置,确保编码格式统一。
    5. 删除了 sourceSets 中的 srcDirs 'build/generated/source/proto/main/grpc',因为这个路径不是标准的gRPC输出路径。
    6. jarfrom 部分,使用 configurations.compileClasspath 而不是 configurations.implementation,以包含所有必要的类库。

    将上述代码保存到build.gradle文件中,然后尝试再次运行gradle build命令。如果还有其他问题,可能需要检查您的 proto 文件(product_info.proto)是否正确定义以及是否符合gRPC规范。同时,请确保您的IDEA已正确导入项目并设置了主类。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月4日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?