Protobuff从另一个目录导入

Aar*_*esh 6 import protocol-buffers

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

protoc --proto_path=/home/project_new1/account --java_out=/home/project_new1/source   /home/project_new1/settings/Useroptions.proto
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

/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.
Run Code Online (Sandbox Code Playgroud)

PS:目录/ home/project_new1/kernel/source/com/adventnet/vo/kernel/model/settings
目录中的UserOptionsProto.proto导入目录/ home/project_new1/kernel/source/com/adventnet /中的MailAccountProto.proto VO /核心/模型/帐户

Proto描述符文件:

UserOptionsProto.proto

package settings;

import "Account.proto";

option java_outer_classname = "UserOptionsVOProto";
Run Code Online (Sandbox Code Playgroud)

MailAccountProto.proto

package account;

option java_outer_classname = "AccountVOProto";

message Object
{
    optional string userId = 1;
    optional string service = 2;   
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*rda 12

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

/home/project_new1/
Run Code Online (Sandbox Code Playgroud)

但是你传递的文件是:

/home/project_new1/settings/UserOpti?ons.proto
Run Code Online (Sandbox Code Playgroud)

请注意,该文件不在account子目录中; 而是在settings.

您有两种选择:

  • (不推荐)传递第二个--proto_path参数以添加.../settings到路径.
  • (推荐)使用源树的作为proto路径.例如:

    protoc --proto_path=/home/project_new1/ --java_out=/home/project_new1 /home/project_new1/settings/UserOpti?ons.proto
    
    Run Code Online (Sandbox Code Playgroud)

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

import "acco??unt/Account.proto";
Run Code Online (Sandbox Code Playgroud)

  • 由于`MailAccount.proto`中的`package`声明,你需要将其写成`com.adventnet.vo.kernel.model.account.BaseDFSLookupProto`。`java_outer_classname` 仅适用于 Java 代码,不适用于 `.proto` 代码。 (2认同)