Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编译google fhir原型文件_Java_Protocol Buffers_Bazel_Hl7 Fhir_Google Protocol Buffer - Fatal编程技术网

Java 如何编译google fhir原型文件

Java 如何编译google fhir原型文件,java,protocol-buffers,bazel,hl7-fhir,google-protocol-buffer,Java,Protocol Buffers,Bazel,Hl7 Fhir,Google Protocol Buffer,查看google fhir的自述文件,它说要运行bazel build,这是可行的,但是没有编译任何协议文件 正在运行protoc--proto_path=--java_out=。proto/stu3/resources.proto返回一系列关于找不到其他proto的错误。这会一直追溯到“descriptor.proto”,它不是文件夹中的proto。该目录中的任何协议文件都不会手动编译为java文件 *另一方面,我能够从其他来源获取其他protos示例并成功地编译它们 更新 从google f

查看google fhir的自述文件,它说要运行
bazel build
,这是可行的,但是没有编译任何协议文件

正在运行
protoc--proto_path=--java_out=。proto/stu3/resources.proto
返回一系列关于找不到其他proto的错误。这会一直追溯到“descriptor.proto”,它不是文件夹中的proto。该目录中的任何协议文件都不会手动编译为java文件

*另一方面,我能够从其他来源获取其他protos示例并成功地编译它们

更新

从google fhir基本目录运行命令proto--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.
symbol:类可编码概念
位置:package com.google.fhir.stu3.proto
./PlanDefinition.java:30950:错误:找不到符号
public com.google.fhir.stu3.proto.CodeableConceptOrBuilder获取管辖权或编译器(
^
符号:类CodeableConceptOrBuilder
位置:package com.google.fhir.stu3.proto
./PlanDefinition.java:30956:错误:找不到符号
private java.util.List主题;
^
符号:类可编码概念
位置:package com.google.fhir.stu3.proto
./PlanDefinition.java:30964:错误:找不到符号
public java.util.List getTopicList(){
^
符号:类可编码概念
位置:package com.google.fhir.stu3.proto
./PlanDefinition.java:30974:错误:找不到符号

public java.util.List编译命令的格式似乎不正确: --proto_path=这是指向您的proto的路径 --java_out=这是编译类的文件夹

您的论点是: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=目标资源.proto

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

我通过根本不指定
--proto_path=
的实际路径来实现它

我是怎么做到的

  • 我的文件夹结构如下:
    D:\dev\OpenSourceProjects\
    是我的基本文件夹
  • 在这个文件夹中,我有
    googlefhir
    这是我的克隆,还有
    protoc-3.11.3-win64
    这是
  • 例如,要构建
    resources.proto
    请在
    cmd
    中运行以下命令:
cd-D:\dev\OpenSourceProjects\google fhir

D:\dev\OpenSourceProjects\protoc-3.11.3-win64\bin\protoc.exe--proto\u path=--java\u out=./proto/output。\proto\stu3\resources.proto

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

您应该使用Bazel来编译protos。您到底想做什么?在第一句话中,我提到了成功使用Bazel。它创建了以下文件夹
Bazel bin Bazel fhir master Bazel genfiles Bazel out Bazel testlogs contribution.md examples java LICENSE proto README.md testdata WORKSPACE
.However,没有.java协议缓冲区文件。为什么需要.java文件?应该使用Bazel来编译使用protos的java代码。我不想要任何特别的东西,我只想让它工作。据我所知,要在java中使用protobuf,我需要生成生成器文件。这就是我所做的,只是从ProtoDirec开始从基本目录尝试。请参阅上面的更新。谢谢。您自己编写了proto文件吗?您需要删除导入路径中的“proto/stu3/”。如果所有文件都位于同一目录中。否则,您需要移动根proto(“resources.proto”)",然后使用:protoc--proto_path=.--java_out=.resources.protoNo,这不是我自己写的。谢谢你,你的建议很明显有效,java文件已经生成。但是,对于文件夹中不存在的文件,我收到了100个编译错误。请参阅更新,我可以创建一个新问题,并将其标记为我回答的问题当然,我会看一看