如何编译 google-fhir 原型文件
How to compile google-fhir proto files
查看 google-fhir 的自述文件,上面写着 运行 bazel build
,它有效,但是 none 的协议文件已经编译。
运行 protoc --proto_path=. --java_out=. proto/stu3/resources.proto
returns 一大堆关于找不到其他原型的错误。这会倒退,直到 'descriptor.proto' 不是文件夹中的原型。该目录中的 None 个协议文件将手动编译成 java 个文件。
*另一方面,我能够从其他来源获取其他示例原型并成功编译它们。
更新
运行 来自 google-fhir 基本目录的命令 protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto
returns 以下输出:
~/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=这是你的原型的路径
--java_out= 这是您的 class 将被编译的文件夹
你的论据是:proto/stu3/resources.proto,所以我推断你的文件位于proto/stu3.
你能试试这个命令吗,让我们知道它是否适合你:
protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto
如果你的原型描述符是完整的,你应该没有编译错误,你的结果应该在文件夹 "target".
编辑:
查看您最近的编辑,我会说您应该将 resources.proto 移动到您的基本目录中并 运行 以下命令:
protoc --proto_path=. --java_out=target resources.proto
因为您的导入路径已在您的导入中编码。
这有点难以提供帮助,因为我们无权访问您的整个原型描述符。如果您从在线存储库中获取它,如果您能分享它会有所帮助。
我通过根本不指定 --proto_path=
的真实路径来实现它。
我是怎么做到的
- 我的文件夹结构如下所示:
D:\dev\OpenSourceProjects\
是我的基本文件夹。
- 在该文件夹中,我有
google-fhir
这是我对 github repo and protoc-3.11.3-win64
which is the unzip of the protoc binaries 的克隆
- 例如,要在
cmd
中构建 resources.proto
运行 以下内容:
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=
在那里,但为空,所有其他路径都是相对的
查看 google-fhir 的自述文件,上面写着 运行 bazel build
,它有效,但是 none 的协议文件已经编译。
运行 protoc --proto_path=. --java_out=. proto/stu3/resources.proto
returns 一大堆关于找不到其他原型的错误。这会倒退,直到 'descriptor.proto' 不是文件夹中的原型。该目录中的 None 个协议文件将手动编译成 java 个文件。
*另一方面,我能够从其他来源获取其他示例原型并成功编译它们。
更新
运行 来自 google-fhir 基本目录的命令 protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto
returns 以下输出:
~/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=这是你的原型的路径 --java_out= 这是您的 class 将被编译的文件夹
你的论据是:proto/stu3/resources.proto,所以我推断你的文件位于proto/stu3.
你能试试这个命令吗,让我们知道它是否适合你:
protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto
如果你的原型描述符是完整的,你应该没有编译错误,你的结果应该在文件夹 "target".
编辑:
查看您最近的编辑,我会说您应该将 resources.proto 移动到您的基本目录中并 运行 以下命令:
protoc --proto_path=. --java_out=target resources.proto
因为您的导入路径已在您的导入中编码。 这有点难以提供帮助,因为我们无权访问您的整个原型描述符。如果您从在线存储库中获取它,如果您能分享它会有所帮助。
我通过根本不指定 --proto_path=
的真实路径来实现它。
我是怎么做到的
- 我的文件夹结构如下所示:
D:\dev\OpenSourceProjects\
是我的基本文件夹。 - 在该文件夹中,我有
google-fhir
这是我对 github repo andprotoc-3.11.3-win64
which is the unzip of the protoc binaries 的克隆
- 例如,要在
cmd
中构建resources.proto
运行 以下内容:
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=
在那里,但为空,所有其他路径都是相对的