我正在尝试使用maven protoc 插件和我在 Cygwin 中构建的 protoc 可执行文件来编译协议缓冲区代码。我无法从 Cygwin 或 Windows 命令行执行此操作。下面是我在 Windows 中运行它时得到的输出,但从 Cygwin 运行时错误是相同的。我觉得这很奇怪,因为如果问题出在路径转换上,那么我希望其中一个可以工作。可执行文件是用 Cygwin 的 g++ 构建的这一事实是否可能会影响事情?(很明显,有问题的目录确实存在。)
编辑:当我从图片中取出 maven 并手动调用 protoc 时,我得到了同样的错误。
编辑 2:我可以通过使用相对或绝对路径从 Cygwin 手动调用 protoc 来解决此问题(但波浪号扩展不起作用)。使用相对或绝对路径从 Windows 手动调用 protoc 继续给出相同的错误。
[调试] (f) outputDirectory = c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java [调试] (f) 项目 = MavenProject: server:protocol:1.0-SNAPSHOT @ c:\cygwin64\home\dan\code\server\protocol\pom.xml [调试] (f) protoSourceRoot = c:\cygwin64\home\dan\code\server\protocol\src\main\proto [调试] (f) protocPluginDirectory = c:\cygwin64\home\dan\code\server\protocol\target\protoc-plugins [调试] (f) 远程存储库 = [ 编号:中央 网址:https://repo.maven.apache.org/maven2 布局:默认快照:[启用 => false,更新 => 每日] 发布:[启用 => true,更新 => 每日] ] [调试] (f) 会话 = org.apache.maven.execution.MavenSession@24fb6a80 [调试] (f) 跳过 = 假 [调试] (f) staleMillis = 0 [调试] (f)temporaryProtoFileDirectory = c:\cygwin64\home\dan\code\server\protocol\target\protoc-dependencies [调试] (f) writeDescriptorSet = false [DEBUG] -- 结束配置 -- [警告] 没有配置 'protocExecutable' 参数,使用默认值:'protoc' [调试] 原始源根目录: [调试] c:\cygwin64\home\dan\code\server\protocol\src\main\proto [调试] [协议] 可执行文件: [调试] [协议] 协议 [DEBUG] [PROTOC] Protobuf 导入路径: [DEBUG] [PROTOC] c:\cygwin64\home\dan\code\server\protocol\src\main\proto [DEBUG] [PROTOC] Java 输出目录: [调试] [协议] c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java [DEBUG] [PROTOC] Protobuf 描述符: [调试] [协议] c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto [DEBUG] [PROTOC] 命令行选项: [调试] [协议] --proto_path=c:\cygwin64\home\dan\code\server\protocol\src\main\proto --java_out=c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto [INFO] 将 1 个 proto 文件编译到 c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java [错误] 协议失败:c:警告:目录不存在。c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto:文件不在使用--proto_path(或-I)指定的任何路径中。您必须指定包含此文件的 --proto_path。请注意,proto_path 必须是 .proto 文件名的精确前缀—— protoc 太笨了,无法确定两个路径(例如绝对路径和相对路径)何时相等(这比您想象的要难)。