java - 无法从 java 文件 Intellij id 导入 proto 文件
问题描述
我正在尝试从 IntelliJ IDEA 中的 java 文件导入 proto 文件。
我有一个名为 A.proto 的文件和一个名为 B.java 的文件。我尝试Info
从 B.java 文件中的 A.proto 文件导入一个类,如下所示:
import A.Info;
但是,IntelliJ IDEA 并不支持 proto 文件,并表示我的类不存在。我安装了插件Protobuf Support
和Protocol Buffer Editor
. 但它仍然不起作用。任何想法?
解决方案
问题
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
推荐阅读
- ios - 无效更新:UITableView 部分行数无效问题
- amazon-web-services - 如何修复 Redshift db 中的历史表?
- r - 比较两个数据集的百分位数的线性回归
- reactjs - Material-UI 自动完成分组逻辑不支持重复项
- c++ - 当我的条件应该为假时,如果语句仍在执行
- r - 如何在 R 中使用交互效应和滞后进行固定效应回归?
- java - 下载 libGDX 设置
- r - RSelenium - 网页抓取 - Zepp - 个人足球数据
- python - 有没有办法将这个基本网址与列表连接起来,我已经尝试了所有可能的方法,但无济于事
- oracle - 创建不带参数、Oracle、PL/SQL 的过程时出错