🦔
grpc-spring-starter Getting-Startedで動かないときのメモ
概要
アンドロイドでアプリ作りたくて、バックエンドは grpc でどうだろうって思ったんだけど、
うまくいかなくて困ったときのメモです。
やりたかったこと
proto ファイルから java ソースファイルの生成
前提条件
STS 4.17.0 インストール
pleiades インストール
プロジェクトの作成
Mavenプロジェクトの作成
ファイル(F)-新規(N)-プロジェクト
POM.xmlの修正
Getting Startedを参考に
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test1</groupId>
<artifactId>test1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<protobuf.version>3.19.1</protobuf.version>
<protobuf-plugin.version>0.6.1</protobuf-plugin.version>
<grpc.version>1.42.1</grpc.version>
</properties>
<dependencies>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${grpc.version}</version>
</dependency>
<dependency>
<!-- Java 9+ compatibility - Do NOT update to 2.0.0 -->
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>1.3.5</version>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.7.0</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>${protobuf-plugin.version}</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
HelloRequest の.protoファイル定義
src/main/proto/hello.proto
syntax = "proto3";
package net.devh.boot.grpc.example;
option java_multiple_files = true;
option java_package = "net.devh.boot.grpc.examples.lib";
option java_outer_classname = "HelloWorldProto";
// The greeting service definition.
service MyService {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {
}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
いざ maven install
[ERROR] ソース・オプション5は現在サポートされていません。7以降を使用してください。
[ERROR] ターゲット・オプション5は現在サポートされていません。7以降を使用してください。
ソースオプション5対策
pom.xml properties に追加を入れる
<properties>
<protobuf.version>3.19.1</protobuf.version>
<protobuf-plugin.version>0.6.1</protobuf-plugin.version>
<grpc.version>1.42.1</grpc.version>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
java のバージョンかなと思ったんだけど、
maven.compiler.source, maven.compiler.targetを指定しないとうまくいかない。
いざ maven install あげん
[ERROR] /home/ubuntu/ws2/test1/target/generated-sources/protobuf/java/net/devh/boot/grpc/examples/lib/HelloRequest.java:[146,48] シンボルを見つけられません
シンボル見つからないとな。
grpc.versionの変更
<grpc.version>1.42.1</grpc.version>
↓に変更
<grpc.version>1.51.0</grpc.version>
いざ maven install 決定版
まとめ
いくつかpom.xml を設定すると動くことがわかった。
maven.compiler.source, maven.compiler.target
grpc.version
を見直すべし。
Discussion