Protobuff从另一个目录导入

时间:2014-01-16 10:42:26

标签: import protocol-buffers

尝试使用以下命令编译名为UserOptions.proto的原型文件,该文件具有名为Account.proto的导入

protoc --proto_path=/home/project_new1/account --java_out=/home/project_new1/source   /home/project_new1/settings/Useroptions.proto

我收到以下错误:

/home/project_new1/settings/UserOpti‌​ons.proto: File does not reside within any path specified using --proto_path (or -I). You must specify a --proto_path which encompasses this file.

PS:UserOptions.proto出现在目录/ home / project_new1 / settings
中 导入目录中的Account.proto /家庭/ project_new1 /帐户

原型描述符文件:

UserOptions.proto

package settings;

import "Account.proto";

option java_outer_classname = "UserOptionsVOProto";

Account.proto

package account;

option java_outer_classname = "AccountVOProto";

message Object
{
    optional string userId = 1;
    optional string service = 2;   
}

3 个答案:

答案 0 :(得分:10)

如错误消息所述,您在命令行上传递的文件需要位于--proto_path之一。在您的情况下,您只指定了一个--proto_path

/home/project_new1/

但是你传递的文件是:

/home/project_new1/settings/UserOpti‌ons.proto

请注意,该文件不在account子目录中;它取而代之的是settings

您有两种选择:

  • (不推荐)传递第二个--proto_path参数,将.../settings添加到路径中。
  • (推荐)使用源树的 root 作为proto路径。 E.g:

    protoc --proto_path=/home/project_new1/ --java_out=/home/project_new1 /home/project_new1/settings/UserOpti‌ons.proto
    

在这种情况下,要导入Account.proto,您需要写:

import "acco‌​unt/Account.proto";

答案 1 :(得分:0)

对于我们这些真正想要这个的人,这里有一个例子,我使用NuGet包Google.Protobuf,Grpc.Core和Grpc.Tools为gRPC安装了protoc beta。我的解决方案包比我的Grpc目录高一级(即在BruTrader \ packages中)。我的.proto文件位于BruTrader \ Grpc \ protos。

1. My .proto file:
syntax = "proto3";
import "timestamp.proto";
import "enums.proto";
package BruTrader.Grpc;

message DividendMessage {
    double amount = 1;
    google.protobuf.Timestamp dateUnix = 2;
}

2. my GenerateProto.bat file:
..\packages\Google.Protobuf.3.0.0-beta2\tools\protoc.exe -I..\Grpc\protos -I..\packages\Google.Protobuf.3.0.0-beta2\tools\google\protobuf --csharp_out=..\Grpc\Generated --grpc_out=..\Grpc\Generated --plugin=protoc-gen-grpc=..\packages\Grpc.Tools.0.13.0\tools\grpc_csharp_plugin.exe %1

3. my BuildProtos.bat
call GenerateProto ..\Grpc\protos\masterinstrument.proto
call GenerateProto .\protos\instrument.proto
etc.

4. BuildProtos.bat is executed as a Pre-build event on my Grpc project like this:
CD $(ProjectDir)
CALL "$(ProjectDir)BuildProtos.bat"

答案 2 :(得分:0)

对于我的环境,Windows 10 Pro操作系统和C ++编程语言,我使用了protoc-3.12.2-win64.zip,您可以从here下载它。您应该在protoc-3.12.2-win64 \ bin路径内打开Windows PowerShell,然后必须执行以下命令之一:

.\protoc.exe -I=C:\Users\UserName\Desktop\SRC --cpp_out=C:\Users\UserName\Desktop\DST C:\Users\UserName\Desktop\SRC\addressbook.proto

.\protoc.exe --proto_path=C:\Users\UserName\Desktop\SRC --cpp_out=C:\Users\UserName\Desktop\DST C:\Users\UserName\Desktop\SRC\addressbook.proto

注意:

1-我的源文件夹位于:C:\ Users \ UserName \ Desktop \ SRC

2-我的目标文件夹位于:C:\ Users \ UserName \ Desktop \ DST

3-我的.proto文件位于:C:\ Users \ UserName \ Desktop \ SRC \ addressbook.proto