2017-01-28 3 views
1

Были попытки установить компилятор протоколов буферов и установку времени java, но я получаю сообщение об ошибке при компиляции классов java. Скачал:Ошибка компиляции при установке буферов протоколов

  • protoc-3.2.0rc2-linux-x86_64.zip (хотя он говорит, что версия 2.6.1)

  • protobuf-java-3.2.0rc2.zip

структура файла выглядит следующим образом:

  • проект/
    • protobuf_dir/
      • в Protobuf файлов/каталогов, в том числе SRC/и Java/
      • SRC/
        • protoc (двоичный)
        • protoc_dir/(остальные биты и качается из protoc архива)
      • Java/
        • ядро ​​/
        • облегченная/
        • ...

Так если предположить, что все в порядке, я напечатал:

protoc --java_out=src/main/java -I../src \../src/google/protobuf/descriptor.proto 

Так protoc кажется, работайте отлично. Но я продолжал получать ошибки, подобные этим, пока я не заметил их (не уверен, что это проблема?):

google/protobuf/descriptor.proto:443:3: Expected "required", "optional", or "repeated". 
google/protobuf/descriptor.proto:443:12: Expected field name. 
google/protobuf/descriptor.proto:541:3: Expected "required", "optional", or "repeated". 
google/protobuf/descriptor.proto:541:12: Expected field name. 

Но когда я пытаюсь компиляции всех классов Java, я просто получаю сообщение об ошибке сказав:

Descriptors.java:1175: error: cannot find symbol 
    return FieldDescriptorProto.Type.forNumber(ordinal() + 1); 

Любые идеи о том, как решить проблему? Не могу понять, почему он не должен компилироваться. Попытался посмотреть на страницу Google, но на это ничего не вышло.

Зная, что я звучу немного невежественно, хотя я никогда не использовал такие библиотеки, как protobuf от Github, прежде чем это все новое для меня!

EDIT: Привет всем, эта проблема была решена с точно такой же файловой структурой. Я удалил protoc2.6.1, установил переменные $ JAVA_HOME и $ PATH (вы должны их хранить, а не экспортировать их каждый раз), установленный maven (правильно).

Все хорошо! Все составлено без сучка и задоринки. Спасибо ответчику!

+0

Как выглядит дескриптор.proto? –

+0

@JoeC не совсем уверен, что вы просите точно. Файл можно найти по этой ссылке (https://github.com/google/protobuf/blob/master/src/google/protobuf/descriptor.proto), а для поля синтаксиса установлено значение «proto2», если это что-то значит. –

ответ

2

protoc-3.2.0rc2-linux-x86_64.zip (хотя он говорит, что версия 2.6.1)

В этом проблема - вы как-то используете protoc 2.6.1, а не 3.2.0. Это может быть связано с тем, что protoc 2.6.1 уже установлен в вашей системе, и как-то он имеет приоритет над 3.2.0. Если вы посмотрите на ошибки в дескрипторе.proto, вы заметите, что они произойдут в ключевое слово reserved, что является новым; 2.6.1 не поддержал его.

Важно использовать ту же версию протока, что и библиотека времени выполнения Java, иначе сгенерированный код может не компилироваться правильно или может скомпилироваться, но не работать корректно.

+0

Это имеет смысл! Любая идея о том, как я могу удалить 2.6.1? –

+0

@ DanielSoutar Зависит от того, как вы его установили в первую очередь. :) –

Смежные вопросы