В этом проекте используются бинарные пакеты, лицензированные в соответствии с Пользовательским соглашением JetBrains (https://www.jetbrains.com/legal/docs/toolbox/user/).
Это версия наших плагинов Bazel с ранним доступом для IntelliJ, Android Studio и CLion.
Плагин Bazel регулярно загружается на JetBrains Marketplace из состояния этого репозитория. Дополнительную информацию смотрите на вкладке «Релизы».
Пожалуйста, ознакомьтесь с последним обновлением сообщества для плагина Bazel IntelliJ: объявление о совместном сопровождении Bazel и JetBrains плагина IntelliJ IDEA Bazel.
В проекте Bazel размещается специальная группа по интересам (SIG) для подключаемого модуля Bazel IntelliJ IDE. Подробности о SIG и о том, как присоединиться к обсуждению, можно найти в уставе SIG.
См. запись в документации о поддержке плагинов в продуктах, языках и операционных системах JetBrains.
Плагины Bazel для IntelliJ и CLion собираются и выпускаются из основной ветки этого репозитория. Внешняя команда сопровождающих занимается проблемами плагинов IntelliJ и CLion и запросами на включение.
Плагин Bazel для Android Studio создан и выпущен на платформе AOSP. Ветка Google больше не поддерживается.
Хотя код в этом репозитории и в AOSP имеют одинаковую структуру и основные компоненты, они отличаются друг от друга.
Вы можете найти наш плагин в JetBrains Marketplace или непосредственно из IDE, перейдя в Settings -> Plugins -> Marketplace
и выполнив поиск Bazel
.
Бета-версии обычно загружаются на бета-канал за две недели до того, как они станут полноценными выпусками. Способы их установки:
Settings -> Plugins -> Gear Icon -> Manage Plugin repositories
и добавьте один из следующих URL-адресов в зависимости от вашего продукта. Теперь вы можете найти последнюю бета-версию в разделе Settings -> Plugins -> Marketplace
или обновить плагин Bazel до бета-версии, если вы его уже установили.https://plugins.jetbrains.com/plugins/beta/8609
https://plugins.jetbrains.com/plugins/beta/9554
https://plugins.jetbrains.com/plugins/beta/9185
Рекомендуем посмотреть это видео, чтобы ознакомиться с возможностями плагина.
Чтобы импортировать существующий проект Bazel, выберите Import Bazel Project
и следуйте инструкциям мастера импорта проекта.
Подробные документы доступны здесь.
Пожалуйста, прочитайте этот комментарий № 4745 (комментарий)
Чтобы правильно выделить Python, попробуйте открыть окно «Структура проекта» и установить там «Фасет Python».
Чтобы правильно настроить удаленную разработку (https://www.jetbrains.com/remote-development/), выполните следующие действия:
Установите Bazel, затем создайте целевой *:*_bazel_zip
для желаемого продукта:
bazel build //ijwb:ijwb_bazel_zip --define=ij_product=intellij-ue-oss-latest-stable
bazel build //clwb:clwb_bazel_zip --define=ij_product=clion-oss-latest-stable
bazel build //aswb:aswb_bazel_zip --define=ij_product=android-studio-oss-latest-stable
из корня проекта. При этом будет создан zip-файл плагина bazel-bin/<PRODUCT>/<PRODUCT>_bazel.zip
, который можно установить непосредственно из IDE. <PRODUCT>
может быть одним из ijwb, clwb, aswb
.
Если IDE отказывается загружать плагин из-за проблем с версией, укажите правильный ij_product
. Они имеют форму <IDE>-oss-<VERSION>
с
<IDE>
является одним из intellij-ue, intellij, clion, android-studio
,<VERSION>
— одна из oldest-stable, latest-stable, under-dev
. Альтернативно, вы можете установить ij_product
для прямых версий IntelliJ или CLion, например clion-2023.2
, intellij-2023.2
или intellij-ue-2023.2
Обратите внимание, что существует разница между intellij
и intellij-ue
. ue
означает IntelliJ Ultimate Edition и содержит дополнительные функции для JavaScript и Go.
<IDE>-oss-oldest-stable
и <IDE>-oss-latest-stable
— это псевдонимы двух версий IDE, с которыми плагин официально совместим в данный момент. <IDE>-oss-latest-stable
обычно соответствует последней выпущенной версии IDE, тогда как <IDE>-oss-oldest-stable
соответствует предыдущей, например, <IDE>-oss-oldest-stable=2022.1
и <IDE>-oss-latest-stable=2022.2
. Кроме того, <IDE>-oss-under-dev
представляет собой предстоящую версию IDE, над поддержкой которой мы работаем. Полное сопоставление всех определенных на данный момент версий можно найти в intellij_platform_sdk/build_defs.bzl
.
Вы можете импортировать проект в IntelliJ (с плагином Bazel), импортировав файл ijwb/ijwb.bazelproject
.
Вы можете собрать плагин для разных версий IDE, настроив параметр ij_product
либо из командной строки, либо обновив файл .bazelproject
, указав желаемое значение для ij_product
в разделе build_flags
.
У нас есть три псевдонима для версий продукта;
oldest-stable
— это самая старая версия IDE, поддерживаемая плагином Bazel, выпущенная на стабильном канале JetBrains.latest-stable
— это последняя версия IDE, поддерживаемая плагином Bazel, выпущенная на стабильном канале JetBrains.under-dev
— это версия IDE, над поддержкой которой мы сейчас работаем.Текущие версии этих псевдонимов, соответствующие IDE, можно найти здесь.
Мы приветствуем вклад в поддержку новых версий IDE. Однако, чтобы ускорить и упростить процесс проверки, мы рекомендуем следующее:
Мы можем принимать только небольшие запросы на включение. Запросы на вытягивание меньшего размера, как правило, сопровождаются меньшим количеством комментариев и, следовательно, могут быть отправлены намного быстрее. Они также имеют тенденцию меньше конфликтовать с нашей внутренней базой кода, что упрощает для нас интеграцию. Например, вам следует иметь отдельные запросы на включение, каждый из которых фокусируется на определенном несовместимом изменении, а не иметь большой запрос на включение, исправляющий несколько из них.
Поскольку мы продолжаем поддерживать ряд версий IDE при работе над новой, вам необходимо убедиться, что предлагаемые вами изменения не нарушают работу старых версий. Наш конвейер предварительной отправки позаботится о тестировании ваших изменений на всех поддерживаемых версиях и сообщит вам, не нарушило ли что-нибудь.
Чтобы облегчить слияние ваших изменений с исходной версией, мы рекомендуем следовать нашей процедуре поддержки обратной совместимости SDK.
Сначала рассмотрите возможность настройки кода плагина, чтобы он напрямую работал с разными версиями IDE. Примерами стратегий для этого могут быть:
Для нетривиальных несовместимых изменений код поддержки совместимости SDK находится в каталогах sdkcompat и test/testcompat, где testing/testcompat
хранятся изменения совместимости SDK только для тестирования. Каждый из двух каталогов содержит подпапку для каждой поддерживаемой версии IDE с реализациями для конкретной версии. Внешний API всех классов должен быть одинаковым в разных версиях, только реализация может отличаться. Добавляя новый файл в этот каталог, обязательно дублируйте его во всех версиях.
Мы следуем этим трем методам для нетривиальных несовместимых изменений.
Совместимость
Предпочтительно использовать адаптер и обертку, если это применимо. Мы добавляем util-класс только со статическими методами и частным конструктором и оборачиваем измененный метод одним из статических методов. Если изменение достаточно небольшое, вам не нужно создавать новый util-класс и вместо этого следует добавить изменение в класс BaseSdkCompat. Пример: пр/2345
Адаптер
Используется, когда мы расширяем суперкласс и обновляется его конструктор. Мы создаем новый класс, расширяющий измененный суперкласс, а затем расширяем этот новый класс из кода плагина. Пример: пр/2352
обертка
Создается, когда новый интерфейс используется в конструкторе суперкласса. Мы создаем класс-оболочку, которая обертывает и предоставляет старый или новый интерфейс на основе версии SDK, и используем этот класс-оболочку в коде плагина. Пример: пр/2166
Все изменения совместимости должны быть прокомментированы с помощью #api{API_VERSION}
, например #api203
. Это последняя версия API, для которой требуется код, т. е. версия, предшествующая версии, которую вы планируете поддерживать. Это нужно для того, чтобы было проще найти и очистить этот функционал при прокладке старых версий.
Классы совместимости никогда не должны импортировать код плагина, и мы стараемся, чтобы логика и код в них были как можно меньшими.
Мы также можем принять участие в исправлении общих проблем или добавлении новых функций с некоторыми оговорками: