Класс Java, созданный из 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-L78. Аргумент этой функции типа UnusedPrivateParameter не найден.

Вторая ошибка: https://gist.github.com/rajcspsg/07c1ddb889410397ba6fc6f26ab2b158#file-gistfile1-txt-L890. Нет 2-х аргументов перегруженной версии internalBuildGeneratedFileFrom.

Что не так с моим прото-файлом. Как я могу исправить эту проблему?


person Rajkumar Natarajan    schedule 22.08.2019    source источник


Ответы (2)


Упомянутые вами ошибки случаются у меня только с версией 3.9.1. Версия 3.7.1 создает файл, в котором не используется UnusedPrivateParameter или версия internalBuildGeneratedFileFrom с двумя параметрами. Скорее использует версию с 3 параметрами, что не вызывает никаких ошибок.

Убедитесь, что вы используете правильную версию протокола:

$ main/exec/protoc --version
libprotoc 3.7.1
person Maik    schedule 23.08.2019

Убедитесь, что зависимость, которую вы используете в своем коде, такая же, как та, которую вы использовали в качестве компилятора 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;
}

И это работает.

person irvifa    schedule 10.04.2020
comment
Это решение, просто убедитесь, что вы используете одну и ту же версию probuf при создании класса и в зависимостях проекта maven / gradle. - person phcaze; 25.08.2020
comment
Не могли бы вы тогда отметить это как ответ? Спасибо :) - person irvifa; 25.08.2020