我在搞清楚如何编译GRPC Java服务器时遇到了很多麻烦。我浏览了整个grpc.io网站,我发现的最接近的是:http://www.grpc.io/docs/#quick-start,我在那里跑
../gradlew -PskipCodegen=true installDist
构建,和
./build/install/grpc-examples/bin/hello-world-client
运行客户端。这一切都有效,但仅适用于hello-world教程。我不知道如何为我自己的客户端/服务器执行此操作。我能够使用.proto文件生成客户端/服务器protobufs。我查看了他们的自述文件和Java教程,在编写实际的服务器(和客户端)之后无法找到它们的编译方式。
https://github.com/grpc/grpc-java/blob/master/examples/README.md
(无法链接java教程,因为我没有足够的声誉)。除非我的文档丢失,否则有没有人知道如何编译实现从.proto文件生成的GRPC类的服务器和客户端?我确实花了很多时间搜索。非常感谢任何建议,谢谢。
答案 0 :(得分:6)
也有类似的问题,请确保:
protoc
,downloading the executable并将其配置为操作系统的环境变量。 build.gradle
文件,请确保包含protobuf-gradle-plugin:
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'com.google.protobuf'
ext.grpcVersion = '1.0.1'
ext.protobufVersion = '3.0.2'
buildscript {
repositories { mavenCentral() }
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0' }
}
repositories {
mavenCentral()
}
dependencies {
compile "com.google.protobuf:protobuf-java:${protobufVersion}"
compile "io.grpc:grpc-all:${grpcVersion}"
}
protobuf {
protoc { artifact = "com.google.protobuf:protoc:${protobufVersion}" }
plugins { grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" } }
generateProtoTasks { ofSourceSet('main')*.plugins { grpc { } } }
}
idea {
module {
sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java");
sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/grpc");
}
}
您的proto
文件:
syntax = "proto3";
package com.company.project;
service CompanyService{
rpc call(RequestMessage) returns (ResponseMessage) {}
}
运行gradle clean build
,它应为CompanyService
生成服务和客户端类。
idea
插件,用于告知IntelliJ将src/main/proto
识别为源集。
要实际执行客户端和服务器,您需要进行gRpc教程中提到的实现,然后应用application
插件,以便正确生成可执行文件{{1 }}
jar
答案 1 :(得分:0)
Eric Anderson已经回答了on groups.google.com这个问题'
JAR只包含您的代码。听起来你想做一个"胖"包含所有依赖项的jar。你可以这样做:
jar { from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } }
请注意,这不是特定于gRPC的;它只是与Gradle合作。可能有其他选择,例如快速谷歌搜索返回gradle-fatjar-plugin。
答案 2 :(得分:0)
我有一个类似的问题,但通过添加'应用程序'插件在Gradle中使用它解决了它。在我使用'java'插件之前,我只能生成一个jar文件。切换到'应用程序'插件后,有一个类似于gRPC示例的gradle任务。
./gradlew installDist
现在要启动服务器,你可以运行类似的东西:
./build/install/your-project/bin/your-server
要从我的.proto文件中实际生成Java类,我需要运行'./gradle build',并且还包括使用sourceDir元素生成的源,您可以在下面的build.gradle中看到它。
这是完整的build.gradle文件。
apply plugin: 'application'
apply plugin: 'com.google.protobuf'
apply plugin: 'idea'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.6'
}
}
repositories {
jcenter()
}
dependencies {
compile 'io.grpc:grpc-all:0.14.0'
}
mainClassName = "com.domain.service.YourMainClass"
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.0.0-beta-2"
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:0.14.0'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
idea {
module {
sourceDirs += file("${projectDir}/build/generated/source/proto/main/grpc");
sourceDirs += file("${projectDir}/build/generated/source/proto/main/java");
}
}
我是gRPC的新手,因此对我的Gradle文件的任何改进都会被批准。