Компиляция protobufs для C# и Java

Для компиляции в файлы C# все наши файлы.proto содержат такие строки:

option (google.protobuf.csharp_file_options).namespace = "com.test.foo.SomeClass";

Я хотел бы использовать эти прото-файлы и для java (у меня установлена ​​необходимая опция java_package), но если я скомпилирую, я получу всевозможные ошибки. Удаление этого материала csharp приводит к хорошей компиляции для Java.

Есть ли в любом случае я могу использовать те же файлы для компиляции для C# и Java?

Использование proto2, protocf 2.5 и protobuf-java 2.5

РЕДАКТИРОВАТЬ: Вот некоторые из ошибок компиляции Java:

com.test.foo.protobuf.CSharpOptions cannot be resolved to type
com.test.foo.protobuf.CSharpOptions cannot be resolved to a variable

РЕДАКТИРОВАТЬ 2: Процесс сборки это просто скрипт, который запускает это:

${PROTOC} -I=/absolute/path/to/proto --java_out=src/main/java /absolute/path/to/proto/*.proto

EDIT3: вот быстрый пример. Вот моя структура каталогов:

[~/source/shared/example]$ find .
.
./Contact.proto
./google
./google/protobuf
./google/protobuf/descriptor.proto
./google/protobuf/csharp_options.proto

csharp_options.proto и дескриптор можно найти здесь.

Вот содержимое Contact.proto:

package Example.Data.ProtocolBuffer;

import "google/protobuf/csharp_options.proto";
option java_package = "com.example.data.protobuf";
option java_outer_classname = "ContactProto";

option (google.protobuf.csharp_file_options).namespace = "Example.Data.ProtocolBuffer.Contact";

message Contact {
        required string name = 1;
        required string address = 2;
        repeated int32 rank = 3;
}

После выполнения сценария protoc (см. "Редактирование 2") он создает следующее:

[~/source/prototest]$ find .
.
./src
./src/main
./src/main/java
./src/main/java/com
./src/main/java/com/example
./src/main/java/com/example/data
./src/main/java/com/example/data/protobuf
./src/main/java/com/example/data/protobuf/ContactProto.java

В настоящее время я просто использую Eclipse для компиляции. (Пока нет мавена). В eclipse он сообщает о следующих ошибках компилятора:

google cannot be resolved   ContactProto.java   
google cannot be resolved to a variable ContactProto.java

Вот оскорбительный код:

    ...
    com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance();
registry.add(google.protobuf.CsharpOptions.csharpFileOptions); //compiler error
              return registry;
            }
          };
        com.google.protobuf.Descriptors.FileDescriptor
          .internalBuildGeneratedFileFrom(descriptorData,
            new com.google.protobuf.Descriptors.FileDescriptor[] {
              google.protobuf.CsharpOptions.getDescriptor(), //compiler error
            }, assigner);
      }

Как вы можете видеть, он ожидает, что CsharpOptions присутствует, но это не так.

0 ответов

Другие вопросы по тегам