java - 从Proto Buff实现服务器时无法解析符号类-一元API

标签 java gradle intellij-idea protocol-buffers grpc-java

Gradle项目

bundle 实现grpc-使用java-gradle项目的一元API

Build.gradle

group = "com.kaushik.grpc" version = "1.0-SNAPSHOT"

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

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

repositories {
    mavenCentral()
}

description = "gRPC Java Examples"

dependencies {
    compile 'io.grpc:grpc-all:0.13.1'
}


protobuf {
    protoc {
        // The version of protoc must match protobuf-java. If you don't depend on
        // protobuf-java directly, you will be transitively depending on the
        // protobuf-java version that grpc depends on.
        artifact = "com.google.protobuf:protoc:3.0.0-beta-2"
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:0.13.1'
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}


greet.proto

syntax = "proto3";

package greet;

option java_package = "com.proto.greet";
option java_multiple_files = true;

message Greeting {
    string first_name = 1;
    string last_name = 2;
}

message GreetRequest {
    Greeting greeting = 1;
}

message GreetResponse {
    string result = 1;
}

service GreetService {
    //unary
    rpc Greet(GreetRequest) returns (GreetResponse) {};
}


尝试扩展GreetServiceGrpc时

import com.proto.greet.GreetServiceGrpc;
public class GreetServiceImpl extends GreetServiceGrpc.GreetServiceImplBase{

}


无法解析符号GreetServiceImplBase。
即使在构建路径中,GreetServiceImplBase也没有类。

最佳答案

GreetServiceImplBase是基于gradle文件中的配置(依赖关系,生成的源目录)生成的。 gradle文件中的样本条目:

dependencies {
compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.6.1'

testCompile group: 'junit', name: 'junit', version: '4.12'

compile group: 'io.grpc', name: 'grpc-stub', version: '1.16.1'

compile group: 'io.grpc', name: 'grpc-protobuf', version: '1.16.1'

compile group: 'io.grpc', name: 'grpc-netty', version: '1.16.1'

compile "io.grpc:grpc-all:1.16.1"
compile group: 'com.github.os72', name: 'protoc-jar', version: '3.6.0'
compile group: 'org.projectlombok', name:'lombok', version: '1.18.4'
compile 'com.google.protobuf:protobuf-java-util:3.6.1'
}
sourceSets {
    main {
        java {
            srcDirs = ["src/main/java/", "src/generated/main/grpc/", "src/generated/main/java/"]
        }
    }
    test {
        java {
            srcDirs = ["src/test/"]
        }
    }
}
idea {
    module {
        sourceDirs += file("${projectDir}/src/generated/main/java");
        sourceDirs += file("${projectDir}/src/generated/main/grpc");
    }
}
clean {
    delete "$projectDir/src/generated"
}

现在执行gradle任务“generateProto”

关于java - 从Proto Buff实现服务器时无法解析符号类-一元API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53730431/

相关文章:

java - 从字符串解析 int 会产生错误的结果

Android Studio 指责 Google Repository 未安装在 SDK Manager 中

android - 从代码更改插件操作图标

java - TextDrawable - 根据键(电子邮件、id)显示颜色

java - JFrame中的图像显示

java - 无法使用 Selenium 打开 Google Chrome Portable

android - 更新到 Android Studio,现在收到 AAPT : error: resource attr/type not found error for Navigation

android - 尝试将本地 android 库模块发布到 Artifactory

java - 如何使用 Spring Boot 注入(inject)模拟?

maven - 我可以在 Maven 项目中运行 IntelliJ 单元测试而不重新运行 Maven 目标吗?