让 IntelliJ 从 Proto 文件生成 Java 源代码

问题描述 投票:0回答:1

在我的 Mac 上,我在本地安装了

libprotoc 27.3
(协议缓冲区),我试图让它与 IntelliJ 内的 Java 17 应用程序“很好地配合”。我的 Java 应用程序具有以下高级目录结构:

myapp/
    src/
        main/
            java/
            proto/
            resources/

src/main/proto/
目录中有一个名为
dostuff.proto
的文件,它看起来像这样:

syntax = "proto3";

package stuffdoer;
option java_multiple_files = true;
option java_package = "com.me.myapp.dostuff.stuffdoer";

message DoStuffRequest{
  bytes image = 1;
}

message DoStuffResponse{
  string stuff_image = 1;
}

service DoStuffDetection{
  rpc GetStuffToDo(DoStuffRequest) returns (DoStuffResponse) {}
}

我相信这个想法是我需要运行这个工具来生成 Java 源代码,然后可以在该项目的其他领域使用。果然,我看到有 Java 源文件似乎期望由该文件生成 Java 代码。一个示例是名为

DoStuffClient
的 Java 源文件,它声明了以下导入语句:

package com.me.myapp.dostuff.stuffdoer.client;

import com.google.protobuf.ByteString;
import com.me.myapp.dostuff.stuffdoer.DoStuffGrpc;
import com.me.myapp.dostuff.stuffdoer.DoStuffRequest;
import io.grpc.StatusRuntimeException;

...

在 IntelliJ 中,我收到编译器错误,因为我没有显式运行 Google Protocol Buffers 来读取此内容

dostuff.proto
并生成
DoStuffGrpc
DoStuffRequest
Java 源代码。

当我在本地运行 Maven 构建并在本地计算机上运行应用程序时,它会启动,我可以手动测试

DoStuffClient
中的代码并验证它是否正常工作。所以我相信 Maven 正确生成了 Java 源代码(在
dostuff.proto
中定义)并使它们可供 Java 运行时使用。

然而,在 IntelliJ 中遇到编译器错误是很烦人的。我该怎么做才能从 IntelliJ 内部调用 Google Protocol Buffers,以便它生成 Java 源代码(在

dostuff.proto
中定义)并使它们可用于编译时路径,这样我在编写代码时就不再看到编译器错误在 IntelliJ 中?

要让 IntelliJ 从我的

.proto
文件生成 Java 源代码,然后将其链接到编译时路径,以便打开的项目中的其他源文件可以“看到”它们,需要采取哪些具体步骤?

java intellij-idea protocol-buffers protocol-buffers-3
1个回答
0
投票

因此,如果您希望它发挥出色,您必须在工作时生成文件。

从终端中的资源文件夹(您可以从 intellij 内的终端执行此操作),您将需要运行命令以从原型生成 java 代码:

protoc --java_out="../java" --proto_path=./ *.proto

注意:如果您打算随着时间的推移对原型进行添加/更改,您可能需要设置一个脚本来删除所有原型文件,然后重新创建原型。这比每次都手动操作更容易。

由于它位于同一个项目内,因此您应该能够运行

mvn clean install
来让它尝试为您建立连接。

如果它没有自动添加源文件,您可以通过进入设置 -> 模块 -> 源(我相信)并添加源文件夹来添加它们。

© www.soinside.com 2019 - 2024. All rights reserved.