尝试使用以下命令编译名为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/UserOptions.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;
}
答案 0 :(得分:10)
如错误消息所述,您在命令行上传递的文件需要位于--proto_path
之一。在您的情况下,您只指定了一个--proto_path
:
/home/project_new1/
但是你传递的文件是:
/home/project_new1/settings/UserOptions.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/UserOptions.proto
在这种情况下,要导入Account.proto
,您需要写:
import "account/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