【问题标题】:How to compile google-fhir proto files如何编译 google-fhir 原型文件
【发布时间】:2018-04-20 21:41:18
【问题描述】:

查看 google-fhir 的自述文件,它说运行 bazel build,它可以工作,但是没有任何协议文件被编译。

运行protoc --proto_path=. --java_out=. proto/stu3/resources.proto 返回一堆关于未找到其他原型的错误。这会倒退到“descriptor.proto”,它不是文件夹中的原型。该目录中的所有协议文件都不会手动编译成 java 文件。

*另一方面,我能够从其他来源获取其他示例原型并成功编译。

更新

从 google-fhir 基本目录运行命令 protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto 会返回以下输出:

~/fhir-master$ protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto
proto/stu3/annotations.proto: File not found.
proto/stu3/codes.proto: File not found.
proto/stu3/datatypes.proto: File not found.
resources.proto: Import "proto/stu3/annotations.proto" was not found or had errors.
resources.proto: Import "proto/stu3/codes.proto" was not found or had errors.
resources.proto: Import "proto/stu3/datatypes.proto" was not found or had errors.
resources.proto:84:5: "String" is not defined.
resources.proto:87:14: "Extension" is not defined.
resources.proto:90:14: "Extension" is not defined.
resources.proto:94:5: "Reference" is not defined.
resources.proto:97:5: "PositiveInt" is not defined.
...
...


这些文件肯定位于同一个 proto 目录中。

更新 2

嗯,这绝对不是开箱即用的。移动文件,我能够生成包含一堆 Java 文件的目标文件夹。但是,尝试编译它们时,我得到了不存在的文件的错误:

  symbol:   class CodeableConcept
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30950: error: cannot find symbol
  public com.google.fhir.stu3.proto.CodeableConceptOrBuilder getJurisdictionOrBuilder(
                               ^
  symbol:   class CodeableConceptOrBuilder
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30956: error: cannot find symbol
  private java.util.List<com.google.fhir.stu3.proto.CodeableConcept> topic_;
                                               ^
  symbol:   class CodeableConcept
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30964: error: cannot find symbol
  public java.util.List<com.google.fhir.stu3.proto.CodeableConcept> getTopicList() {
                                              ^
  symbol:   class CodeableConcept
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30974: error: cannot find symbol
  public java.util.List<? extends com.google.fhir.stu3.proto.CodeableConceptOrBuilder> 

  ....                                                         ^
  100 errors.

!另外,我在这里看不到这些文件:https://github.com/google/protobuf/tree/master/java/core/src/main/java/com/google/protobuf

【问题讨论】:

  • 你应该使用 Bazel 来编译 protos。你到底想做什么?
  • 在第一句话中我提到成功使用了 bazel。它会创建以下文件夹bazel-bin bazel-fhir-master bazel-genfiles bazel-out bazel-testlogs CONTRIBUTING.md examples java LICENSE proto README.md testdata WORKSPACE。但是,没有 .java 协议缓冲区文件。
  • 为什么需要 .java 文件?您应该使用 Bazel 来编译使用 protos 的 Java 代码。
  • 我不想要任何特别的东西,我只想让它工作。据我了解,要在 Java 中使用 protobuf,我需要生成构建器文件。

标签: java bazel hl7-fhir protocol-buffers


【解决方案1】:

看起来您的编译命令格式不正确: --proto_path= 这是你的原型的路径 --java_out= 这是你的类将被编译的文件夹

你的论点是:proto/stu3/resources.proto,所以我推断你的文件位于proto/stu3。

你能试试这个命令,让我们知道它是否对你有用:

protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto

如果你的 proto 描述符是完整的,你应该没有编译错误,你的结果应该在文件夹“target”中。

编辑: 查看您的最新编辑,我会说您应该将 resources.proto 移动到您的基本目录并运行以下命令: protoc --proto_path=. --java_out=target resources.proto

因为您的导入路径已在您的导入中编码。 这有点难以帮助,因为我们无法访问您的整个原型描述符。如果您从在线回购中获取它,如果您可以分享它会有所帮助。

【讨论】:

  • 这是我正在做的,仅来自 proto 目录。从基本目录尝试过,请参阅上面的更新。谢谢。
  • 你自己写的 proto 文件?您需要在导入路径中删除“proto/stu3/”。如果所有文件都位于同一目录中。否则,您需要将根 proto ("resources.proto")" 移动到根文件,并使用:protoc --proto_path=.--java_out=.resources.proto
  • 不,这不是我自己写的。谢谢,您对显而易见的工作的建议并生成了 Java 文件。但是,对于文件夹中不存在的文件,我收到 100 个编译错误。请参阅更新,我可以创建一个新问题并将其标记为已回答。
  • 好的,我去看看
【解决方案2】:

我完全没有指定到--proto_path= 的真实路径来让它工作。

我是怎么做到的

  • 我的文件夹结构如下所示:D:\dev\OpenSourceProjects\ 是我的基本文件夹。
  • 在该文件夹中,我有google-fhir,这是我的github repo 的克隆和protoc-3.11.3-win64,这是protoc binaries 的解压缩
  • 例如,要构建resources.proto,在cmd 中运行以下命令:

cd D:\dev\OpenSourceProjects\google-fhir

D:\dev\OpenSourceProjects\protoc-3.11.3-win64\bin\protoc.exe --proto_path= --java_out=./proto/output .\proto\stu3\resources.proto

  • 请注意,--proto_path= 存在,但为空且所有其他路径都是相对的

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多