Как настроить VS Code и Gradle для использования сгенерированного кода Java с плагином Gradle Protobuf?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как настроить VS Code и Gradle для использования сгенерированного кода Java с плагином Gradle Protobuf?

Сообщение Anonymous »

Я пытаюсь использовать Protobuf с официальным плагином Gradle от Google, с Gradle, в VS Code, в небольшом приложении Java для проверки рабочего процесса.
Я не могу заставить VS Code распознать сгенерированный исходный код Java, а в терминале я не могу заставить Gradle распознать код, когда я пытаюсь использовать Gradle для создания приложения.
VS Code отображает это, когда я пытаюсь сослаться на сгенерированный код. код:
Изображение

И Gradle отображает следующую ошибку, когда я пытаюсь выполнить сборку:

Код: Выделить всё

> Task :app:compileJava FAILED
/home/mattgbi/vscode-gradle-protobuf-repro/app/src/main/java/vscode/gradle/protobuf/repro/App.java:14: error: cannot find symbol
System.out.println(Person.class);
^
symbol:   class Person
location: class App
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 405ms
4 actionable tasks: 1 executed, 3 up-to-date
Я понимаю, что мне нужно добавить импорт в App.java, чтобы использовать класс Person. Но когда я пытаюсь вызвать для этого инструмент завершения кода VS Code, как описано выше, автодополнение кода мне не помогает.
Однако, если я вручную ввожу оператор импорта, VS Code сообщает, что не может его найти.:
Изображение

Однако на этом этапе Gradle может использовать оператор импорта (даже несмотря на то, что VS Code выдает ошибки) и может завершить сборку:

Код: Выделить всё

> ./gradlew build

> Task :app:compileJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

BUILD SUCCESSFUL in 1s
13 actionable tasks: 10 executed, 3 up-to-date
Вот репозиторий GitHub с полным воспроизведением проблемы: https://github.com/mattwelke/repros/tre ... obuf-repro
Вот шаги, которые я выполнил, чтобы столкнуться с этой проблемой:
  • Создайте проект с gradle init. Выберите «приложение» и оставьте все настройки по умолчанию.
  • Следуйте инструкциям на странице https://github.com/google/protobuf-gradle-plugin, чтобы добавить плагин в мой проект. Добавьте часть «buildscript» в начало файла build.gradle над частью плагинов файла. Добавьте строку внутри части плагинов с идентификатором «com.google.protobuf» версии «0.8.18» под идентификатором строки «application» в этой части. Добавьте блок, начинающийся с protobuf {, в конец файла, чтобы я мог загрузить Gradle и использовать собственный двоичный файл protoc.
  • Следуйте руководству по Java для Protobuf (https://developers.google.com/protocol- ... vatutorial), добавьте код с сообщением Person { в верхней части страницы в мое приложение в новом файле. app/src/main/proto/message.proto.
  • Сборка с помощью ./gradlew build в терминале VS Code.
  • Наблюдайте за исходным кодом, сгенерированным в app/build/generated/source, хотя в консоли были ошибки, сообщающие, что пакет com.google.protobuf не существует.
  • Добавить зависимость protobuf-java (из https://mvnrepository.com/artifact/com. ... tobuf-java) в файл build.gradle в разделе зависимостей файла, чтобы мои приложения, сгенерированные исходным кодом Java, могли ссылаться на библиотеку Protobuf. Выбрал версию 3.21.1, потому что на данный момент это последняя версия. Добавлено использование синтаксиса реализации.
  • Снова создайте приложение с помощью ./gradlew build в терминале VS Code. На этот раз в терминале ошибок не обнаружено.
  • Попробуйте написать исходный код в App.java (в разделе src), который ссылается на сгенерированный класс Person. VS Code не может его найти.
  • Попытайтесь снова собрать приложение с помощью ./gradlew build в терминале VS Code. Gradle также не может найти исходный код.
  • Вручную добавьте оператор импорта в App.java. Обратите внимание, что VS Code отображает ошибки о том, что пакет все еще не найден.
  • Попытайтесь собрать приложение еще раз с помощью ./gradlew build в терминале VS Code. Gradle также не может найти исходный код. На этот раз Gradle преуспел. Единственная оставшаяся проблема заключается в том, как IDE распознает весь код (желательно, чтобы весь код, включая сгенерированный, распознавался).


Подробнее здесь: https://stackoverflow.com/questions/724 ... the-gradle
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»