协议:在 service.proto 中导入未解决
protoc: import in service.proto not resolved
我有一个项目,其中 service
定义位于消息定义的单独文件中。协议不喜欢这样:
Execution failed for task ':generateProto'.
> protoc: stdout: . stderr: IAscIndication.proto:11:13: "AscIndication" is not defined.
IAscIndication.proto:11:37: "AscResponse" is not defined.
(从 gradle 调用协议)。
这是不应该做的事情还是我们设置中的问题或 protoc
(3.19.4) 中的错误?当我将两个文件合并为一个文件时它会起作用。
有问题的文件:
IAscIndication.proto
syntax = "proto3";
import "Asc.proto";
package com.tyntec.hades.v1;
option java_multiple_files = true;
option java_package = "com.tyntec.hades.grpc";
service IAscIndication
{
rpc Asc(AscIndication) returns (AscResponse) {}
}
Asc.proto
syntax = "proto3";
import "BaseTypes.proto";
package tyntec.hades.v1;
option java_multiple_files = true;
option java_package = "com.tyntec.hades.grpc";
message AscRequest
{
SignalOutbound meta = 1;
AscRequestData data = 2;
}
message AscIndication
{
SignalInbound meta = 1;
AscRequestData data = 2;
}
这是从 bash 调用时的命令行和错误:
> /home/martinsc/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protoc/3.19.4/99ed7588824cb00e0db4f1b215e7d4c69d00e74b/protoc-3.19.4-linux-x86_64.exe -I/home/martinsc/java/mt/acheron/src/main/proto -I/home/martinsc/java/mt/acheron/build/extracted-protos/main -I/home/martinsc/java/mt/acheron/build/extracted-include-protos/main --java_out=/home/martinsc/java/mt/acheron/src/generated/main/java --plugin=protoc-gen-grpc=/home/martinsc/.gradle/caches/modules-2/files-2.1/io.grpc/protoc-gen-grpc-java/1.44.1/5d42eec0c997038e3a131dea05ad9f5be37992cb/protoc-gen-grpc-java-1.44.1-linux-x86_64.exe --grpc_out=/home/martinsc/java/mt/acheron/src/generated/main/grpc /home/martinsc/java/mt/acheron/src/main/proto/Asc.proto /home/martinsc/java/mt/acheron/src/main/proto/BaseTypes.proto /home/martinsc/java/mt/acheron/src/main/proto/Error.proto /home/martinsc/java/mt/acheron/src/main/proto/IAscIndication.proto
IAscIndication.proto:11:13: "AscIndication" is not defined.
IAscIndication.proto:11:37: "AscResponse" is not defined.
系统是Ubuntu20.4.
这是因为包裹不匹配(可能是拼写错误)。为了包含另一个文件,它们要么需要在同一个包中,要么您需要在协议中使用 -I
选项。
因此,在您的情况下,您可能需要将 Asc.proto
包更改为:
package com.tyntec.hades.v1;
或将您的 IAscIndication.proto
更改为:
package tyntec.hades.v1;
如果不想换包,有两种可能:
- 尝试像这样 运行 协议:
protoc -I. [your_other_options] *.proto
- 在 rpc 端点中使用完全限定名称
rpc Asc(tyntec.hades.v1.AscIndication) returns (tyntec.hades.v1.AscResponse) {}
我有一个项目,其中 service
定义位于消息定义的单独文件中。协议不喜欢这样:
Execution failed for task ':generateProto'.
> protoc: stdout: . stderr: IAscIndication.proto:11:13: "AscIndication" is not defined.
IAscIndication.proto:11:37: "AscResponse" is not defined.
(从 gradle 调用协议)。
这是不应该做的事情还是我们设置中的问题或 protoc
(3.19.4) 中的错误?当我将两个文件合并为一个文件时它会起作用。
有问题的文件:
IAscIndication.proto
syntax = "proto3";
import "Asc.proto";
package com.tyntec.hades.v1;
option java_multiple_files = true;
option java_package = "com.tyntec.hades.grpc";
service IAscIndication
{
rpc Asc(AscIndication) returns (AscResponse) {}
}
Asc.proto
syntax = "proto3";
import "BaseTypes.proto";
package tyntec.hades.v1;
option java_multiple_files = true;
option java_package = "com.tyntec.hades.grpc";
message AscRequest
{
SignalOutbound meta = 1;
AscRequestData data = 2;
}
message AscIndication
{
SignalInbound meta = 1;
AscRequestData data = 2;
}
这是从 bash 调用时的命令行和错误:
> /home/martinsc/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protoc/3.19.4/99ed7588824cb00e0db4f1b215e7d4c69d00e74b/protoc-3.19.4-linux-x86_64.exe -I/home/martinsc/java/mt/acheron/src/main/proto -I/home/martinsc/java/mt/acheron/build/extracted-protos/main -I/home/martinsc/java/mt/acheron/build/extracted-include-protos/main --java_out=/home/martinsc/java/mt/acheron/src/generated/main/java --plugin=protoc-gen-grpc=/home/martinsc/.gradle/caches/modules-2/files-2.1/io.grpc/protoc-gen-grpc-java/1.44.1/5d42eec0c997038e3a131dea05ad9f5be37992cb/protoc-gen-grpc-java-1.44.1-linux-x86_64.exe --grpc_out=/home/martinsc/java/mt/acheron/src/generated/main/grpc /home/martinsc/java/mt/acheron/src/main/proto/Asc.proto /home/martinsc/java/mt/acheron/src/main/proto/BaseTypes.proto /home/martinsc/java/mt/acheron/src/main/proto/Error.proto /home/martinsc/java/mt/acheron/src/main/proto/IAscIndication.proto
IAscIndication.proto:11:13: "AscIndication" is not defined.
IAscIndication.proto:11:37: "AscResponse" is not defined.
系统是Ubuntu20.4.
这是因为包裹不匹配(可能是拼写错误)。为了包含另一个文件,它们要么需要在同一个包中,要么您需要在协议中使用 -I
选项。
因此,在您的情况下,您可能需要将 Asc.proto
包更改为:
package com.tyntec.hades.v1;
或将您的 IAscIndication.proto
更改为:
package tyntec.hades.v1;
如果不想换包,有两种可能:
- 尝试像这样 运行 协议:
protoc -I. [your_other_options] *.proto
- 在 rpc 端点中使用完全限定名称
rpc Asc(tyntec.hades.v1.AscIndication) returns (tyntec.hades.v1.AscResponse) {}