Ошибка компиляции при компиляции protobufs в Java с использованием инструмента сборки sbt
Я использую инфраструктуру игры (которая использует инструмент сборки SBT) с Java, где мне нужно использовать протобуф. Итак, у меня есть файл xxx.proto. Я получил двоичный протокольный компилятор и добавил к пути к классам. так что я вижу -
протокол - версия
libprotoc 3.1.0
Я скомпилировал файл xxx.proto, используя -protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/xxx.proto
поэтому он сгенерировал файл xxx.java.
Теперь, когда я собираю этот файл xxx.java (проект, использующий инструмент сборки sbt)
[error] /my_project/app/helpers/xxx.java:7: package com.google.protobuf does not exist
[error] com.google.protobuf.ExtensionRegistryLite
[error] /my_project/app/helpers/xxx.java:11: package com.google.protobuf does not exist
[error] com.google.protobuf.ExtensionRegistry
[error] /my_project/app/helpers/xxx.java:6182: package com.google.protobuf.Descriptors does not exist
[error] com.google.protobuf.Descriptors.Descriptor
[error] /my_project/app/helpers/xxx.java:6185: package com.google.protobuf.GeneratedMessageV3 does not exist
[error] com.google.protobuf.GeneratedMessageV3.FieldAccessorTable`
Я вижу в моей установленной библиотеке - com.google.protobuf jar есть.
Мой xxx.proto выглядит следующим образом -
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: xxx.proto
public final class xxx {
private xxx() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
......
Есть ли что-то, что я пропустил при создании файла xxx.java. Как я должен исправить эти ошибки компиляции.
3 ответа
Вы должны убедиться, что вы используете точно такие же версии protoc
а также libprotobuf.jar
, Из того, что вы написали, похоже, что вы используете protoc версии 3.1.0, но libprotobuf 2.5.0. Вместо этого вам нужно использовать libprotobuf 3.1.0, иначе вы получите ошибки компиляции, подобные тем, которые вы цитируете.
Повторное изложение ответа Кентона с дополнительными инструкциями:
В Intellij нажмите "Внешние библиотеки" и найдите банку для protobuf.
Проверьте версию протокола:
Если они не совпадают (как показано выше), вы получите ошибки компиляции.
Я видел аналогичную проблему с maven после изменения некоторого типа поля в моей прото-схеме, а затем сборки без предварительной очистки. Однако выполнение очистки и сборки исправляло это каждый раз.