Android protobuf nano использование
я пытаюсь генерировать java-файлы снизу файла proto с помощью protobuf nano. Я получил некоторые основные инструкции о том, как действовать в это так нити.
у меня есть этот файл прото, personal.proto
:
package tutorial;
option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}
я пытался следовать инструкции отсюда, точнее версия NANO:
- загрузить
protobuf-2.5.0.zip
и компиляторprotoc-2.5.0-win32.zip
С здесь. - Разархивированные
protobuf-2.5.0.zip
в папку и там вsrc
папку разархивировалprotoc.exe
. - изменено на
java
папка и там выдано:mvn clean package -P nano
. Эта команда работала нормально и вtarget
папка у меняprotobuf-java-2.5.0.jar
отсюда я не уверен, как продолжить, так как в первичной документации у меня есть такое заявление:
- Link with the generated jar file
<protobuf-root>java/target/protobuf-java-2.3.0-nano.jar.
я не уверен, что это значит, как связать? Есть ли какой-то параметр для protoc.exe
это указывает файл jar использовать?
я попытался выполнить эту команду:protoc --javanano_out=enum_style=java --java_out=generated personal.proto
но я получаю эту ошибку: --javanano_out: protoc-gen-javanano: The system cannot find the file specified
.
вопрос: что я упускаю/делаю не так выше? Я пытаюсь создать java-файлы сверху proto-файла.
1 ответов
Я думаю, что это protoc
не компилируется с javanano
поддержка.
предварительно скомпилированная версия windows 2.5.0 не включает поддержку nano, взгляните на исходный код, в "src\google\protobuf\compiler
" путь, включает в себя генератор java, но не генератор javanano. Последний исходный код в репозиториях google включает javanano.
можно скачать последний исходный код и попробуйте скомпилировать его с помощью MinGW и msys или CygWin, взгляните на этот пост как построить буферы протокола google в Windows для mingw?
(подробности процесса строительства я опубликую позже)
обновление:
финал командной строки после protoc.exe
для одного прото файл
protoc --javanano_out=store_unknown_fields=true:target/generated-sources personal.proto, target/generated-sources
для нескольких файлов proto
protoc --javanano_out=store_unknown_fields=true:target/generated-sources --proto_path=inputpath input/*.proto
редактировать Nano генератор заменяет enum члены с public static final int
поля. Это проблема, если класс имеет необязательный элемент перечисления, потому что этот элемент будет скомпилирован в примитив int
value и будет принимать значение по умолчанию ноль, который будет первым элементом из перечисления. Чтобы отличить случаи, когда значение перечисления не было установлено, можно воспользоваться