grpc-java 的 BindableService 问题

2024-02-05

我正在尝试使用 grpc-java v1.1.2 (下面的 build.gradle 部分),但是当我尝试为示例应用程序运行 fat jar 时,它会抛出下面给出的异常。编译应用程序时我没有看到任何问题。

构建.gradle 部分:

    apply plugin: 'com.google.protobuf'

    buildscript {
        repositories {
            mavenCentral()
            mavenLocal()
        }
        dependencies {
            // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
            // gradle versions
            classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
        }
    }


    def grpcVersion = '1.1.2'   //''1.2.0-SNAPSHOT' // CURRENT_GRPC_VERSION

    dependencies {
        compile "io.grpc:grpc-netty:${grpcVersion}"
        compile "io.grpc:grpc-protobuf:${grpcVersion}"
        compile "io.grpc:grpc-stub:${grpcVersion}"
        compile 'me.grapebaba:hyperledger-java-client:0.1.3'
}


    protobuf {
        protoc {
            artifact = 'com.google.protobuf:protoc:3.2.0'
        }
        plugins {
            grpc {
                artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
            }
        }
        generateProtoTasks {
            all()*.plugins {
                grpc {
                    // To generate deprecated interfaces and static bindService method,
                    // turn the enable_deprecated option to true below:
                    option 'enable_deprecated=false'
                }
            }
        }
    }

    idea {
        module {
            // Not using generatedSourceDirs because of
            // https://discuss.gradle.org/t/support-for-intellij-2016/15294/8
            sourceDirs += file("${projectDir}/build/generated/source/proto/main/java");
            sourceDirs += file("${projectDir}/build/generated/source/proto/main/grpc");
        }
    }


    jar {
        manifest {
               attributes(
                    'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
                    'Main-Class': 'com.test.io.grpc.HelloWorldServer'
            )
        }
    }



    task helloWorldServer(type: CreateStartScripts) {
        mainClassName = 'io.grpc.mgcs.HelloWorldServer'
        applicationName = 'hello-world-server'
        outputDir = new File(project.buildDir, 'tmp')
        classpath = jar.outputs.files + project.configurations.runtime
    }

    task helloWorldClient(type: CreateStartScripts) {
        mainClassName = 'io.grpc.mgcs.HelloWorldClient'
            applicationName = 'hello-world-client'
            outputDir = new File(project.buildDir, 'tmp')
            classpath = jar.outputs.files + project.configurations.runtime
    }

    applicationDistribution.into('bin') {
        from(helloWorldServer)
        from(helloWorldClient)
        fileMode = 0755
    }

例外

Caused by: java.lang.ClassNotFoundException: io.grpc.BindableService
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我通过使用 Shadow 插件创建 fat jar 解决了这个问题。

    buildscript {
        repositories {
            mavenCentral()
            mavenLocal()
        }
        dependencies {
            classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.9"
            classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4'
            classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
        }
    }

    plugins {
        id 'java'
        id 'application'
        id 'idea'
        id 'com.github.johnrengelman.shadow' version '1.2.4'
        id "net.ltgt.errorprone" version '0.0.9'
    }


    shadowJar {
        baseName = 'shadow'
        classifier = null
        version = null
    }

jar {
    manifest {
        attributes(
                'Class-Path': configurations.runtime.files.collect {"$it.name"}.join(' '),
                'Main-Class': 'com.abc.test'
        )
    }
}

运行以下命令:

gradle shadowJar

ShadowJar 文件在 build/libs 目录中创建,可以运行为:

java -jar shadowJar
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

grpc-java 的 BindableService 问题 的相关文章

随机推荐

  • 点击 Google Contacts API 时出现“连接被同行重置”错误

    我正在尝试使用 Google Contacts API 将 Google Contacts 拉入 Rails 应用程序 我已完成 Oauth2 握手 现在使用我的访问令牌请求受保护的资源 这是代码 uri URI https www goo
  • 为什么我们需要错误类?

    We have Throwable类是其基类Error类 对于无法恢复的错误 和Exception类 对于可恢复的 errors So 1 gt we can throw一个实现的对象error类 虽然实现没有意义Error类因为我们有Ex
  • 如何在流星中的 DOM 准备好后执行辅助函数

    我有一个清单 li 如下所示 使用 Meteor startup 用 find 填充 然后我得到这些的所有数据属性 li li 使用 data 并将其放入一个对象中并尝试 return console log 它 以便我可以查看它是否有效
  • 使用MPMusicPlayerController,设置musicPlayer.currentPlaybackTime进行seek但需要秒才能生效

    我有一个 UISlider 充当洗涤器 当拖动拇指时 我执行以下操作 void seekTo double playbackTime mPlayer currentPlaybackTime playbackTime 效果很好 音乐寻求前进
  • 无法捕获托管代码中的本机异常

    我有一个混合的 NET 和本机代码控制台应用程序 由于 Visual C 运行时库致命错误 应用程序进程被终止 即使我使用以下内容 托管代码也不会捕获本机异常 尝试 捕获块 AppDomain UnHandledExption 标记Runt
  • C++ 中的内存栅栏/屏障:boost 或其他库有它们吗?

    这些天我正在阅读有关内存栅栏和屏障的内容 作为同步多线程代码和避免代码重新排序的一种方法 我通常在 Linux 操作系统下使用 C 进行开发 并且使用boost大量的库 但我找不到任何与之相关的类 你知道boost中是否存在栅栏的内存屏障或
  • Heroku on Rails - DATABASE_URL 无效

    编辑 一般建议是使用CEDAR stack 对于 RoR Gems Heroku 和 Git 来说还很陌生 以下教程 http ruby railstutorial org book ruby on rails tutorial http
  • 通过 FontAwesome 进行星级评定的 CSS

    我已经通过不同的方法尝试了 CSS 星级评定的一些变体 并且尝试通过 FontAwesome 而不是使用精灵来实现以下内容 我希望能够理想地包含半星 但这就是下面的示例失败的地方 这是我到目前为止所尝试过的 我无法让半 部分星在这里正常工作
  • 使用 EPSG:25832 投影在 Leaflet 中垂直对齐 TMS 图块

    我使用 Leaflet 和 Proj4Leaflet 来处理 25832 中的图块 该应用程序相当简单 我尝试将 EPSG 25832 中的图块叠加到全比例底图上 我已从瓷砖地图元信息中复制了各个分辨率和来源 我面临的问题是地图未对齐 一旦
  • R 和带有循环的网页抓取

    我正在抓取一个网站urls http example com post X 在哪里X是从1 5000开始的数字我可以使用刮擦rvest使用此代码 website lt html http www example com post 1 Nam
  • 如何加载 rjags

    与许多其他人一样 我在加载和安装 rjags 时遇到问题 我收到错误 library rjags Error onLoad failed in loadNamespace for rjags details call fun libname
  • StartSSL 证书在 Firefox 和 Android 上不受信任

    Apache 服务器 遵循此处的指南 https www startssl com Support v 21 https www startssl com Support v 21 httpd conf SSLEngine on SSLPr
  • Android 中按 MIME 类型获取联系人

    我想根据 Android 中的 MIME 类型获取联系人列表 例如 我想要一个具有电子邮件地址的联系人列表 您应该使用以下方法读取原始联系人以及与其关联的所有数据ContactsContract RawContacts Entity目录 如
  • Java FX 应用程序 onload 事件

    我正在使用 Google 地图 API 在 java swing java fx 中实现一个应用程序 我的问题是这样的 我需要在加载地图时运行 JavaScript 我一直在阅读该方法 webEngine getLoadWorker Sta
  • 如何在 $or 中使用 $regex 作为聚合表达式

    我有一个查询 允许用户使用如下格式按某些字符串字段进行过滤 如果最近一次检查的描述是以下任何一项 foo or bar 这对于以下查询非常有效 db getCollection permits find expr let vars late
  • PyYAML 转储格式

    我知道 StackOverflow 上有一些与此相关的问题 但我找不到我想要的内容 我在用着pyyaml http pyyaml org读书 load a yml文件 修改或添加密钥 然后写入 dump 再次 问题是我想保留转储后的文件格式
  • 尝试运行 XQuery 脚本以单点登录 MarkLogic 时出错

    我正在研究使用 xquery 重写器脚本来自动登录单点登录解决方案 我从端口 8001 的管理应用程序服务器开始 在应用程序服务器配置中 我有 设置身份验证 application level 设置 url 重写器 rewriter xqy
  • WinForms 文本框自动完成事件

    我的表单上有一个具有自动完成功能的 NET 文本框 该表格还具有AcceptButton and CancelButton定义的 如果我尝试提交建议Enter键或关闭下拉菜单Esc 我的表格关闭 我的想法是创建继承自的自定义文本框TexBo
  • 问题“线程“main”中出现异常# START NON-TRANSLATABLEjava.lang.NoClassDefFoundError: G€“Xmx3072m”(MyEclipse 12.0 Blue 和 Websphere7)

    我正在使用 MyEclipse 14 0 Blue 和 Websphere7 我正在尝试通过 服务器 选项卡部署到 Websphere 当它开始部署时 我遇到了以下问题 Exception in thread main START NON
  • grpc-java 的 BindableService 问题

    我正在尝试使用 grpc java v1 1 2 下面的 build gradle 部分 但是当我尝试为示例应用程序运行 fat jar 时 它会抛出下面给出的异常 编译应用程序时我没有看到任何问题 构建 gradle 部分 apply p