首页 > 解决方案 > 无法从 java 文件 Intellij id 导入 proto 文件

问题描述

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

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

import A.Info;

但是,IntelliJ IDEA 并不支持 proto 文件,并表示我的类不存在。我安装了插件Protobuf SupportProtocol Buffer Editor. 但它仍然不起作用。任何想法?

标签: javaintellij-ideaprotocol-buffersproto

解决方案


问题

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 类。这样,只有您的协议缓冲区文件需要在源代码管理中。您让插件负责编译为 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 )

插件源链接:https ://github.com/os72/protoc-jar-maven-plugin

没有 Maven 的解决方案

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


推荐阅读