Проблемы с использованием protobufs с Java и Scala - PullRequest
3 голосов
/ 25 ноября 2011

У меня есть файл xxx.proto. Я скачал компилятор protobuf и установил его. Затем я дал эту команду

protoc --java_out=./ xxx.proto

и это сгенерировало мой xxx.java

Теперь я хочу скомпилировать этот файл в файл класса, который я могу использовать с Scala.

javac xxx.java

Что дает мне эту ошибку

xxx.java:7: package com.google.protobuf does not exist
      com.google.protobuf.ExtensionRegistry registry) {
                         ^
xxx.java:12450: package com.google.protobuf.Descriptors does not exist
  private static com.google.protobuf.Descriptors.Descriptor
                                                ^
xxx.java:12453: package com.google.protobuf.GeneratedMessage does not exist
    com.google.protobuf.GeneratedMessage.FieldAccessorTable

...
...
...

100 errors

Теперь я догадался, у него нет пакета.

Поэтому я скопировал файлы классов пакета com.google.protobuf в ту же папку, где существует xxx.java. Примечание. Я не скомпилировал этот пакет. Я скачал флягу от другого расширения, у которого были файлы фляги. Поэтому я их извлек. Теперь мой текущий путь, где находится xxx.java, имеет com / google / protobuf / * .class библиотеки protobuf. * ​​1015 *

Я снова ввел команду javac.

На этот раз я получил другой набор ошибок -

    xxx.java:10: cannot find symbol
    symbol  : class MessageOrBuilder
    location: package com.google.protobuf
          extends com.google.protobuf.MessageOrBuilder {
                                     ^
    xxx.java:215: cannot find symbol
    symbol  : class MessageOrBuilder
    location: package com.google.protobuf
            extends com.google.protobuf.MessageOrBuilder {
                                       ^
    xxx.java:608: cannot find symbol
    symbol  : class MessageOrBuilder
    location: package com.google.protobuf
            extends com.google.protobuf.MessageOrBuilder {
                                       ^
    xxx.java:1017: cannot find symbol
    symbol  : class MessageOrBuilder
    location: package com.google.protobuf
            extends com.google.protobuf.MessageOrBuilder {

..... 100 errors

Я даже пытался скомпилировать исходные файлы, поставляемые с google protobufs. Сгенерированные Java-классы дают те же ошибки.

Есть идеи что делать ??

Ответ

Хорошо. Спасибо всем.

Основная проблема в том, что пакет компилятора буферов протокола от Google по умолчанию не создает библиотеку Java. Я предполагал, что это делает и устанавливает это. Это действительно так, если вы работаете с Maven. Но у меня не было Maven

Итак, я скомпилировал код в /java/src и использовал банку. ^

Ответы [ 5 ]

6 голосов
/ 25 ноября 2011

При компиляции у вас должен быть файл protobuf lib в вашем classpath. Все эти недостающие пакеты и классы взяты из protobuf lib.

Найдите банку с протобуфом и используйте

javac -cp path/to/protobuf.jar xxx.java
2 голосов
/ 25 ноября 2011

Вы новичок в Java, верно?

Чего не хватает, так это файла библиотеки java (расширение .jar) для protobuf. Он должен быть в «classpath» для компилятора java и среды выполнения java. protoc генерирует ваши классы, но это зависит от библиотеки protobuf. * ​​1003 *

javac xxx.java -cp PATH_TO_PROTOBUF/protobuf-java-2.3.0.jar

Во время выполнения

java mypackage.MyMain -cp PATH_TO_PROTOBUF/protobuf-java-2.3.0.jar
1 голос
/ 24 февраля 2012

Вам может понадобиться использовать версию 2.4.1 (или, по крайней мере, 2.4+) комплекта protobuf, , включая , обеспечивающую обновление protoc (компилятор protobuf) и перекомпилируйте ваше прото определение, используя новый(Другими словами, все должно быть одинаковой версии:

  • файл protobuf-vn.nnjar;
  • компилятор protoc; и
  • вывод компиляции ваших файлов .proto с помощью protoc.

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

0 голосов
/ 03 сентября 2014

Можно установить jar-файл protobuf, используя ubuntu a

apt-get install libprotobuf-java

. Это скопирует protobuf-java-2.4.1.jar в / usr / share / java /

Надеюсь, это поможет

0 голосов
/ 18 марта 2014

protoc -I = $ SRC_DIR --java_out = $ DST_DIR $ SRC_DIR / addressbook.proto

Вы можете загрузить protoc.exe (новый выпуск) из >>.

https://code.google.com/p/protobuf/downloads/detail?name=protoc-2.5.0-win32.zip&can=2&q=

в вашем * .proto файле вы правильно настроили

option java_package = "com.example.package";
option java_outer_classname = "class name";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...