为C#和Java编译protobufs

时间:2015-07-16 22:26:02

标签: java c# protocol-buffers protobuf-net protobuf-csharp-port

对于C#文件的编译,我们所有的.proto文件都包含这样的行:

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

我也想将这些原型文件用于java(我有必要的java_package选项集),但如果我编译,我会得到各种各样的错误。删除这个csharp的东西可以很好地编译Java。

无论如何我可以使用相同的文件来编译C#和Java吗?

使用proto2,protoc 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

EDIT2:构建过程只是一个运行它的脚本:

${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和描述符可以是found here

这是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进行编译。 (还没有maven)。在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 个答案:

没有答案