java - 如何编译 google-fhir 原型(prototype)文件

标签 java bazel hl7-fhir protocol-buffers

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

正在运行protoc --proto_path=。 --java_out=. proto/stu3/resources.proto 返回一堆有关未找到其他原型(prototype)的错误。这会向后移动,直到“descriptor.proto”,它不是文件夹中的原型(prototype)。该目录中的任何协议(protocol)文件都不会手动编译成 java 文件。

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

更新

从 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

最佳答案

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

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

您可以尝试此命令并让我们知道它是否适合您:

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

如果您的原型(prototype)描述符完整,则应该没有编译错误,并且结果应该位于文件夹“target”中。

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

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

关于java - 如何编译 google-fhir 原型(prototype)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49950107/

相关文章:

bazel - 如何使 bazel 目标依赖于另一个 BUILD 文件中的所有目标

hl7-fhir - 我们如何在 FHIR 资源中表示患者的房间号?

java - 'null' 应该被视为数字吗? ...字母数字?

java - 如何检查两个矩阵是否有相同的行?

bazel - 如何使bazel `sh_binary`目标依赖于其他二进制目标?

sql - HL7 2.x只能用来接收消息还是拉数据?

java - 在 FHIR 中发送直接键/值对

java - 在我的 GUI 中切换面板之前,如何使 JMessageDialog 不强制用户关闭它?

java - akka-persistence 与 mysql 数据库

bazel - 验证 bazel 中的步骤