无法从java文件Intellij id导入proto文件

Pau*_*eau 3 java intellij-idea protocol-buffers proto

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

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

import A.Info;
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*ols 6

问题

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>
Run Code Online (Sandbox Code Playgroud)

以及 Protocol Buffer 类的依赖项:

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>3.11.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

使用此插件,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;
}
Run Code Online (Sandbox Code Playgroud)

DistanceWalkedOuterClass.DistanceWalked.java(生成)

package example;

public class DistanceWalked {
 //properties This class isn't pretty...
}
Run Code Online (Sandbox Code Playgroud)

(带有协议缓冲区和 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