Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从java文件Intellij id导入原型文件_Java_Intellij Idea_Protocol Buffers_Proto - Fatal编程技术网

Can';t从java文件Intellij id导入原型文件

Can';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上

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

我有一个名为a.proto的文件和一个名为B.java的文件。我尝试从B.java文件中的a.proto文件导入class
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...
}