Путаница с gRPC - PullRequest
       10

Путаница с gRPC

0 голосов
/ 21 мая 2019

Платформа: Windows 10 ПК; Java: 1.8.0_201; gRPC: 1.21.x

Недавно я изучил пакет Google RPC (gRPC), чтобы попытаться оценить его для использования с Java. Я прочитал много информации, доступной на сайте (grpc.io), и попытался загрузить / собрать / установить ее для оценки теста. Мне не очень повезло.

Немного неясно (во всяком случае, мне), что именно нужно для использования gRPC. Кажется, есть много движущихся частей, и сложно сказать все, что нужно. Я знаю, что он использует Google Protobuf, поэтому я следовал инструкциям по установке компилятора Protobuf, protoc. Я не уверен, что мне нужно что-то еще для Protobuf кроме компилятора. Я предполагаю, что в gRPC есть «ядро», а затем модуль для конкретного языка (например, для Java), который реализует необходимую логику для взаимодействия с программами Java. Я не знаю, есть ли другие зависимости.

Я не могу клонировать репозиторий git из-за политик безопасности, в которых я работаю, но я скачал дистрибутив (v1.21.x из https://github.com/grpc/grpc-java) и распаковал его в каталог. Я следовал инструкциям для сборки образец клиента и сервера. Процесс завершился неудачно из-за отсутствия файлов. Ниже приведен фрагмент ошибки.

> Task :grpc-compiler:compileJava_pluginExecutableJava_pluginCpp
java_generator.h
C:\Users\jo24447\workspace\gRPC\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

java_plugin.cpp
c:\users\jo24447\workspace\grpc\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

java_generator.cpp
c:\users\jo24447\workspace\grpc\grpc-java-1.21.x\compiler\src\java_plugin\cpp\java_generator.h(8): fatal error C1083: Cannot open include file: 'google/protobuf/io/zero_copy_stream.h': No such file or directory

Я присоединился к списку рассылки gRPC и отправил несколько вопросов, описывающих мои проблемы. В коротком ответе указывалось, что я должен снять последнюю версию (которая у меня есть) - я изначально снял ветку master, и, видимо, это было неправильно. Подразумевалось, что он поставляется с предварительно встроенным плагином генератора кода (codegen). Мне не дали причину сбоя сборки.

Была также предоставлена ​​ссылка на инструкции по сборке плагина codegen. Кажется, что документация сайта указывает на то, что мне не нужно создавать кодоген, если я на самом деле не изменяю код, а это не так. Независимо от того, я просмотрел инструкции. Похоже, что он предназначен для этого на платформе * nix. Что должны делать люди, которые делают это на платформе Windows?

В любом случае, я пытался сделать сборку с новым дистрибутивом, и это не помогло с той же проблемой. Я ответил назад и ничего не слышал.

На данный момент я застрял и понятия не имею, что делать дальше.

Любые идеи о следующем будут очень полезны и оценены:

  • Минимальные дистрибутивы, необходимые для успешной сборки и последующее использование
  • Однозначные указания о том, какие шаги необходимо предпринять это из загруженного дистрибутива (ов) в полнофункциональное приложение / утилиту

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Если вы хотите внести изменения в gRPC-Java или собрать его самостоятельно, см. инструкции .Но вам не нужно делать это, чтобы использовать его.


Для использования в проекте Maven / Gradle, просто добавьте необходимые зависимости:

Maven

<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-netty-shaded</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-protobuf</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-stub</artifactId>
  <version>1.20.0</version>
</dependency>

Gradle

compile 'io.grpc:grpc-netty-shaded:1.20.0'
compile 'io.grpc:grpc-protobuf:1.20.0'
compile 'io.grpc:grpc-stub:1.20.0'

Для codegen, основанного на protobuf, вы можете использовать плагины, интегрированные в вашу систему сборки:

protobuf-maven-plugin

<build>
  <extensions>
    <extension>
      <groupId>kr.motd.maven</groupId>
      <artifactId>os-maven-plugin</artifactId>
      <version>1.5.0.Final</version>
    </extension>
  </extensions>
  <plugins>
    <plugin>
      <groupId>org.xolstice.maven.plugins</groupId>
      <artifactId>protobuf-maven-plugin</artifactId>
      <version>0.5.1</version>
      <configuration>
        <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.20.0:exe:${os.detected.classifier}</pluginArtifact>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
            <goal>compile-custom</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

protobuf-gradle-plugin

apply plugin: 'com.google.protobuf'

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

protobuf {
  protoc {
    artifact = "com.google.protobuf:protoc:3.7.1"
  }
  plugins {
    grpc {
      artifact = 'io.grpc:protoc-gen-grpc-java:1.20.0'
    }
  }
  generateProtoTasks {
    all()*.plugins {
      grpc {}
    }
  }
}

Более подробную информацию вы можете найти в README .

1 голос
/ 21 мая 2019

Я частично ответил на то, что, как я полагаю, является веткой списка рассылки , на которую вы ссылались .

grpc-java - это собственная полная реализация. Он не основан на "C core" на https://github.com/grpc/grpc.

Короче говоря, вы сбились с проторенного пути; вам не нужно самостоятельно компилировать grpc-java. У нас уже есть бинарные файлы на Maven Central.

Когда вы загрузили grpc-java, вы должны были скачать v1.12.0, который является тегом выпуска, а не v1.12.x. Выпущенные версии легко загружаются в разделе release .

У нас нет однозначных инструкций, когда git clone недоступен, потому что это редко, и ответы будут различаться для каждой среды.

...