Невозможно импортировать прото файл из java файла Intellij id - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь импортировать файл прото из файла java в IntelliJ IDEA.

У меня есть файл с именем A.proto и файл с именем B. java. Я пытаюсь импортировать класс Info из файла A.proto в файл B. java следующим образом:

import A.Info;

Однако IntelliJ IDEA, похоже, не поддерживает файлы Proto и говорит, что мой класс не существует Я установил оба плагина Protobuf Support и Protocol Buffer Editor. Но это все еще не работает. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Файл прото это просто описание формата сообщения. Он не содержит код, который можно интерпретировать напрямую в контексте java. Идея файла proto заключается в предоставлении общей c, языковой спецификации c спецификации формата сообщения.

На основе файла proto вы можете сгенерировать соответствующий код java. Затем этот код можно использовать и импортировать в ваш проект java.

Узнайте, как сгенерировать код из файла прото: https://developers.google.com/protocol-buffers/docs/javatutorial#compiling -your-protocol-buffers

1 голос
/ 18 апреля 2020

Проблема

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>

И зависимость для классов Protocol Buffer:

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>3.11.4</version>
</dependency>

С помощью этого плагина Intellij найдет созданный Java классов, после первоначального создания источников. Таким образом, только ваши файлы протокола буфера должны быть в Source Control. Вы позволяете плагину позаботиться о компиляции до Java.

После создания классов Java вы можете использовать их в остальной части своего кода. Вы даже можете просмотреть сгенерированные классы Java в папке target / generate-sources вашего проекта Maven.

Вот как выглядит отображение между буфером протокола и 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

...