4

我正在尝试从 protobuf 生成 java 类。

下面是我的protobuf -

syntax = "proto2";

package part2;

option java_package = "part2";

message OnlineStoreUser {
   required int32 userid = 1;
   required string username = 2;
   optional string useremail = 3;
}

我运行命令main/exec/protoc --java_out=main/java main/proto/datamodel.proto

协议是从链接https://github.com/protocolbuffers/protobuf/releases/tag/v3.7.1下载的,其中 osx-x86_64.zip。我也尝试了 3.8.0 和 3.9.1 版本。

第一个错误是https://gist.github.com/rajcspsg/07c1ddb889410397ba6fc6f26ab2b158#file-gistfile1-txt-L78UnusedPrivateParameter找不到此函数类型的参数。

第二个错误是https://gist.github.com/rajcspsg/07c1ddb889410397ba6fc6f26ab2b158#file-gistfile1-txt-L890。不是 2 arg 重载版本的internalBuildGeneratedFileFrom.

我的 proto 文件有什么问题。我该如何解决这个问题?

4

2 回答 2

2

确保您在代码中使用的依赖项与您用作 protobuf 编译器的依赖项相同,例如,这里我使用的是 gradle:

compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.11.1'

我的编译器版本是:

✗ protoc --version                                                
libprotoc 3.11.1

这是我的测试活动:

syntax = "proto2";

option java_package = "com.github.irvifa.protobuf.schema";

message TestEvent {
    optional string event_name = 1 [default = "test.event"];

    optional string name = 2;
    optional string email = 3;
}

这有效。

于 2020-04-10T07:30:06.930 回答
2

你提到的错误只发生在我的版本 3.9.1 中。版本 3.7.1 生成的文件不使用UnusedPrivateParameterinternalBuildGeneratedFileFrom带有 2 个参数的版本。它宁愿使用带有 3 个参数的版本,这不会导致任何错误。

请检查您使用的协议版本是否正确:

$ main/exec/protoc --version
libprotoc 3.7.1
于 2019-08-23T04:32:34.647 回答