Can';t从java文件Intellij id导入原型文件
我正在尝试从IntelliJ IDEA中的java文件导入一个原型文件 我有一个名为a.proto的文件和一个名为B.java的文件。我尝试从B.java文件中的a.proto文件导入classCan';t从java文件Intellij id导入原型文件,java,intellij-idea,protocol-buffers,proto,Java,Intellij Idea,Protocol Buffers,Proto,我正在尝试从IntelliJ IDEA中的java文件导入一个原型文件 我有一个名为a.proto的文件和一个名为B.java的文件。我尝试从B.java文件中的a.proto文件导入classInfo,如下所示: import A.Info; 然而,IntelliJ IDEA并不支持原型文件,并且说我的类不存在。我安装了两个插件Protobuf-Support和protocolbuffereditor。但它仍然不起作用。有什么想法吗 proto文件只是消息格式的描述。它不包含可以在java上
Info
,如下所示:
import A.Info;
然而,IntelliJ IDEA并不支持原型文件,并且说我的类不存在。我安装了两个插件
Protobuf-Support
和protocolbuffereditor
。但它仍然不起作用。有什么想法吗 proto文件只是消息格式的描述。它不包含可以在java上下文中直接解释的代码。
proto文件的思想是为消息格式提供一个通用的、与语言无关的规范
基于proto文件,您可以生成相应的java代码。然后可以在java项目中使用和导入此代码
请看一下如何从proto文件生成代码:问题
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>
DistanceWalkedOuterClass.DistanceWalked.java(已生成)
(这里可以找到协议缓冲区和Maven插件的完整代码示例:)
链接到插件源:
无Maven的解决方案
没有Maven,您必须下载命令行编译器。相关文档可在此处找到:如果有人仍然被卡住- 我发现指定Intellij的路径可以解决问题: 首选项->语言和框架->协议缓冲区->取消选中“自动配置” 然后将路径添加到文件
它应该是好的xolstice或os72 我有一个Maven项目,我已经尝试过这个插件,但它仍然不起作用…你在Git的某个地方有这个项目吗?我可以快速看一下。我已将我的个人项目链接到上面的解决方案中。也许你可以快速检查一下,看看它是否适合你?我的协议缓冲区的包名。这个名字来自一个爱好项目,在那个里我试图用协议缓冲区模拟口袋妖怪Go。除了包名之外,它是不相关的。我添加了单元测试来展示协议缓冲区是如何工作的。您应该检查一下。我的proto缓冲区位于main/src/resources/protobuf目录中,如何从/main/src/java/example/A.java导入它们?首先运行mvn clean包。该插件将为您创建Java类,协议缓冲包为Java包,消息名称为类名。
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.11.4</version>
</dependency>
package example;
message DistanceWalked {
string userId = 1;
double distance = 2;
}
package example;
public class DistanceWalked {
//properties This class isn't pretty...
}