查看google-fhir的自述文件,它说要运行bazel build
,这有效,但是没有编译任何协议文件。
运行protoc --proto_path=. --java_out=. proto/stu3/resources.proto
会返回一堆关于未找到其他原型的错误。这倒退到'descriptor.proto',它不是文件夹中的原型。该目录中的所有协议文件都不会手动编译为java文件。
*另一方面,我能够从其他来源获取其他示例protos并成功编译它们。
更新
从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
答案 0 :(得分:2)
看起来您的编译命令格式不正确: --proto_path =这是你的proto的路径 --java_out =这是您的类将被编译的文件夹
你的论点是:proto / stu3 / resources.proto,所以我推断你的文件位于proto / stu3。
你可以尝试这个命令,让我们知道它是否适合你:
protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto
如果你的proto描述符已经完成,你应该没有编译错误,你的结果应该在#34; target&#34;文件夹中。
编辑:
看看你的最新编辑,我想你应该将resources.proto移动到你的基目录并运行以下命令:
protoc --proto_path=. --java_out=target resources.proto
导入的路径在导入中编码。 这有点难以帮助,因为我们无法访问您的整个原型描述符。如果您从在线仓库中获取它,如果您可以共享它将会有所帮助。
答案 1 :(得分:0)
我完全没有指定到--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=
在那里,但为空且所有其他路径都是相对的