grpc-java的bindableService问题 [英] bindableService issue with grpc-java

查看:170
本文介绍了grpc-java的bindableService问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to use grpc-java v1.1.2 (build.gradle section below) but when I try to run the fat jar for the sample application, its throwing the exception given below. I do not see any issues when compiling the application.

build.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)

推荐答案

我通过使用影子插件创​​建胖子罐来解决此问题.

I fixed the issue by using the shadow plugin for creating fat jars.

    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目录中创建,该文件可以运行为:

the shadowJar file gets created in the build/libs directory which can be run as:

java -jar shadowJar

这篇关于grpc-java的bindableService问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆