无法从 java 文件 Intellij id 导入原型文件

Can't import proto file from java file Intellij id

我正在尝试从 IntelliJ IDEA 中的 java 文件导入原型文件。

我有一个名为 A.proto 的文件和一个名为 B.java 的文件。我尝试从 A.proto 文件中导入 class Info 文件,如下所示:

import A.Info;

但是,IntelliJ IDEA 看起来不支持原型文件,并说我的 class 不存在。我安装了插件 Protobuf SupportProtocol Buffer Editor。但它仍然不起作用。任何想法?

proto文件只是消息格式的描述。它不包含可以在 java 上下文中直接解释的代码。 proto 文件的想法是提供一个通用的、与语言无关的消息格式规范。

基于proto文件,可以生成相应的java代码。然后可以在您的 java 项目中使用和导入此代码。

在这里查看如何从原型文件生成代码:https://developers.google.com/protocol-buffers/docs/javatutorial#compiling-your-protocol-buffers

问题

IntelliJ 可以识别协议缓冲区文件,但它们不是 Java,因此 Java 编译器不知道如何处理它们。

Maven 解决方案

您可以将这些协议缓冲区编译为 Java 文件,这是您当前缺少的步骤。我知道的最好方法是使用 Maven 插件来完成此操作。

 <plugin>
            <groupId>com.github.os72</groupId>
            <artifactId>protoc-jar-maven-plugin</artifactId>
            <version>3.11.4</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <protocVersion>3.0.0</protocVersion> <!-- 2.4.1, 2.5.0, 2.6.1, 3.0.0 -->
                        <includeDirectories>
                            <include>src/main/resources/protobuf</include>
                        </includeDirectories>
                        <inputDirectories>
                            <include>src/main/resources/protobuf/</include>
                        </inputDirectories>
                    </configuration>
                </execution>
            </executions>
        </plugin>

协议缓冲区的依赖性类:

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>3.11.4</version>
</dependency>

使用此插件,Intellij 将在最初创建源后找到创建的 Java 类。 这样,只有您的 Protocol Buffer 文件需要在源代码管理中。你让插件负责编译到 Java.

创建 Java 类 后,您可以在其余代码中使用它们。 您甚至可以在 Maven 项目的 target/generated-sources 文件夹中查看生成的 Java 类。

Protocol Buffers 和 Java 之间的映射如下所示:

DistanceWalked.proto

package example;

message DistanceWalked {
    string userId = 1;
    double distance = 2;
}

DistanceWalkedOuterClass.DistanceWalked.java(生成)

package example;

public class DistanceWalked {
 //properties This class isn't pretty...
}

(带有协议缓冲区和 Maven 插件的完整代码示例可在此处找到:https://github.com/TomCools/protocol-buffers-example

Link 到插件源:https://github.com/os72/protoc-jar-maven-plugin

没有 Maven 的解决方案

没有Maven,你必须下载命令行编译器。可以在此处找到相关文档:https://developers.google.com/protocol-buffers/docs/javatutorial#compiling-your-protocol-buffers

万一还有人卡住 -

我发现指定 Intellij 的路径可以解决问题:

首选项 -> 语言和框架 -> 协议缓冲区 -> 取消选中 "Configure automatically"

然后添加文件路径

xolstice或者os72应该都不错!