Dieses Projekt verwendet Binärpakete, die unter der JetBrains-Benutzervereinbarung lizenziert sind (https://www.jetbrains.com/legal/docs/toolbox/user/).
Dies ist eine Early-Access-Version unserer Bazel-Plugins für IntelliJ, Android Studio und CLion.
Das Bazel-Plugin wird regelmäßig aus dem Status dieses Repositorys auf den JetBrains Marketplace hochgeladen. Weitere Informationen finden Sie auf der Registerkarte „Releases“.
Bitte sehen Sie sich unser neuestes Community-Update für das Bazel IntelliJ-Plugin an: Ankündigung der gemeinsamen Wartung des IntelliJ IDEA Bazel Plugins durch Bazel und JetBrains.
Das Bazel-Projekt veranstaltet eine Special Interest Group (SIG) für das Bazel IntelliJ IDE-Plug-in. Einzelheiten zur SIG und wie Sie sich an der Diskussion beteiligen können, finden Sie in der SIG-Charta.
Sehen Sie sich den Dokumentationseintrag zur Plugin-Unterstützung für alle JetBrains-Produkte, Sprachen und Betriebssysteme an.
Die Bazel-Plugins für IntelliJ und CLion werden im Master-Zweig dieses Repositorys erstellt und veröffentlicht. Ein externes Team von Betreuern kümmert sich um Probleme und Pull-Requests mit IntelliJ- und CLion-Plugins.
Das Bazel-Plugin für Android Studio wurde von AOSP erstellt und veröffentlicht. Der Google-Zweig ist jetzt veraltet.
Obwohl der Code in diesem Repository und in AOSP die gleiche Struktur und die gleichen Kernkomponenten haben, weichen sie voneinander ab.
Sie finden unser Plugin im JetBrains Marketplace oder direkt in der IDE, indem Sie zu Settings -> Plugins -> Marketplace
gehen und nach Bazel
suchen.
Beta-Versionen werden in der Regel zwei Wochen vor der vollständigen Veröffentlichung auf den Beta-Kanal hochgeladen. Möglichkeiten, sie zu installieren:
Settings -> Plugins -> Gear Icon -> Manage Plugin repositories
hinzu und fügen Sie je nach Produkt eine der folgenden URLs hinzu. Sie finden die neueste Beta jetzt unter Settings -> Plugins -> Marketplace
oder aktualisieren Sie das Bazel-Plugin auf Beta, wenn Sie es bereits installiert haben.https://plugins.jetbrains.com/plugins/beta/8609
https://plugins.jetbrains.com/plugins/beta/9554
https://plugins.jetbrains.com/plugins/beta/9185
Wir empfehlen Ihnen, sich dieses Video anzusehen, um sich mit den Funktionen des Plugins vertraut zu machen.
Um ein vorhandenes Bazel-Projekt zu importieren, wählen Sie Import Bazel Project
und befolgen Sie die Anweisungen im Projektimport-Assistenten.
Detaillierte Dokumente finden Sie hier.
Bitte lesen Sie diesen Kommentar #4745 (Kommentar)
Um eine korrekte Python-Hervorhebung zu erhalten, versuchen Sie bitte, das Fenster „Projektstruktur“ zu öffnen und dort „Python-Facette“ festzulegen
Um Remote Development (https://www.jetbrains.com/remote-development/) ordnungsgemäß einzurichten, befolgen Sie diese Schritte:
Installieren Sie Bazel und erstellen Sie dann das Ziel *:*_bazel_zip
für Ihr gewünschtes Produkt:
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
aus dem Projektstamm. Dadurch wird eine Plugin-Zip-Datei unter bazel-bin/<PRODUCT>/<PRODUCT>_bazel.zip
erstellt, die direkt von der IDE installiert werden kann. <PRODUCT>
kann eines von ijwb, clwb, aswb
sein.
Wenn die IDE das Laden des Plugins aufgrund von Versionsproblemen ablehnt, geben Sie das richtige ij_product
an. Diese haben die Form <IDE>-oss-<VERSION>
mit
<IDE>
ist eine von intellij-ue, intellij, clion, android-studio
,<VERSION>
ist eine der oldest-stable, latest-stable, under-dev
. Alternativ können Sie ij_product
auf direkte IntelliJ- oder CLion-Versionen einstellen, zum Beispiel clion-2023.2
, intellij-2023.2
oder intellij-ue-2023.2
Beachten Sie, dass es einen Unterschied zwischen intellij
und intellij-ue
gibt. ue
steht für IntelliJ Ultimate Edition und enthält zusätzliche Funktionen für JavaScript sowie Go.
<IDE>-oss-oldest-stable
und <IDE>-oss-latest-stable
sind Aliase für die beiden IDE-Versionen, mit denen das Plugin zu einem bestimmten Zeitpunkt offiziell kompatibel ist. <IDE>-oss-latest-stable
wird normalerweise der letzten veröffentlichten IDE-Version zugeordnet, während <IDE>-oss-oldest-stable
der direkt davor zugeordneten Version zugeordnet wird, z. B. <IDE>-oss-oldest-stable=2022.1
und <IDE>-oss-latest-stable=2022.2
. Darüber hinaus stellt <IDE>-oss-under-dev
die kommende Version der IDE dar, an deren Unterstützung wir arbeiten. Eine vollständige Zuordnung aller aktuell definierten Versionen finden Sie in intellij_platform_sdk/build_defs.bzl
.
Sie können das Projekt in IntelliJ (mit dem Bazel-Plugin) importieren, indem Sie die Datei ijwb/ijwb.bazelproject
importieren.
Sie können das Plugin für verschiedene IDE-Versionen erstellen, indem Sie die Option ij_product
entweder über die Befehlszeile anpassen oder die Datei .bazelproject
aktualisieren, um den gewünschten Wert für ij_product
unter build_flags
anzugeben.
Wir haben drei Aliase für Produktversionen;
oldest-stable
ist die älteste IDE-Version, die vom Bazel-Plugin unterstützt wird, das für den JetBrains-Stable-Kanal veröffentlicht wurde.latest-stable
ist die neueste IDE-Version, die vom Bazel-Plugin unterstützt wird, das für den JetBrains-Stable-Kanal veröffentlicht wurde.under-dev
ist die IDE-Version, an deren Unterstützung wir derzeit arbeiten.Die aktuellen entsprechenden IDE-Versionen dieser Aliase finden Sie hier.
Wir freuen uns über Beiträge zur Unterstützung neuer IDE-Versionen. Um den Überprüfungsprozess jedoch schneller und einfacher zu gestalten, empfehlen wir Folgendes:
Wir können nur kleine Pull-Anfragen annehmen. Kleinere Pull-Anfragen haben tendenziell weniger Bewertungskommentare und können daher viel schneller eingereicht werden. Sie neigen auch weniger zu Konflikten mit unserer internen Codebasis, was die Integration für uns vereinfacht. Beispielsweise sollten Sie separate Pull-Anfragen haben, die sich jeweils auf eine bestimmte inkompatible Änderung konzentrieren, anstatt eine große Pull-Anfrage zu haben, die mehrere Änderungen behebt.
Da wir weiterhin eine Reihe von IDE-Versionen unterstützen, während wir an einer neuen Version arbeiten, müssen Sie sicherstellen, dass Ihre vorgeschlagenen Änderungen keine älteren Versionen beschädigen. Unsere Presubmit-Pipeline kümmert sich darum, Ihre Änderungen mit allen unterstützten Versionen zu testen und informiert Sie darüber, ob etwas kaputt gegangen ist.
Um das Zusammenführen Ihrer Änderungen im Upstream zu erleichtern, empfehlen wir, unser Verfahren zur Unterstützung der SDK-Abwärtskompatibilität zu befolgen.
Erwägen Sie zunächst, den Plugin-Code so anzupassen, dass er direkt mit verschiedenen IDE-Versionen funktioniert. Beispielstrategien hierfür wären:
Bei nicht trivialen inkompatiblen Änderungen befindet sich der Code zur Aufrechterhaltung der SDK-Kompatibilität in den Verzeichnissen sdkcompat und testing/testcompat, in denen testing/testcompat
nur testbasierte SDK-Kompatibilitätsänderungen enthält. Jedes der beiden Verzeichnisse enthält einen Unterordner pro unterstützter IDE-Version mit versionspezifischen Implementierungen. Die externe API aller Klassen muss in allen Versionen gleich sein, lediglich die Implementierung kann unterschiedlich sein. Wenn Sie eine neue Datei in diesem Verzeichnis einfügen, achten Sie darauf, diese in allen Versionen entsprechend zu duplizieren.
Wir folgen diesen drei Techniken für nicht triviale inkompatible Änderungen.
Kompat
Gegebenenfalls dem Adapter und dem Wrapper vorzuziehen. Wir fügen eine Util-Klasse mit ausschließlich statischen Methoden und einem privaten Konstruktor hinzu und umschließen die geänderte Methode mit einer der statischen Methoden. Wenn die Änderung klein genug ist, müssen Sie keine neue Util-Klasse erstellen und sollten die Änderung stattdessen der BaseSdkCompat-Klasse hinzufügen. Beispiel: pr/2345
Adapter
Wird verwendet, wenn wir eine Superklasse erweitern und ihr Konstruktor aktualisiert wird. Wir erstellen eine neue Klasse, die die geänderte Superklasse erweitert, und erweitern dann diese neue Klasse aus dem Plugin-Code. Beispiel: pr/2352
Verpackung
Wird erstellt, wenn eine neue Schnittstelle in einem Superklassenkonstruktor verwendet wird. Wir erstellen eine Wrapper-Klasse, die die alte oder die neue Schnittstelle basierend auf der SDK-Version umhüllt und bereitstellt, und verwenden diese Wrapper-Klasse im Plugin-Code. Beispiel: pr/2166
Alle Kompatibilitätsänderungen müssen mit #api{API_VERSION}
kommentiert werden, z. B. #api203
. Dies stellt die letzte API-Version dar, die den Code erfordert, also die vor der Version, die Sie unterstützen möchten. Dies ist erforderlich, um das Auffinden und Bereinigen dieser Funktionalität beim Einbinden alter Versionen zu erleichtern.
Kompatible Klassen dürfen niemals Plugin-Code importieren und wir versuchen, die Logik und den Code in ihnen so minimal wie möglich zu halten.
Mit einigen Einschränkungen können wir möglicherweise auch Beiträge zur Behebung allgemeiner Probleme oder zum Hinzufügen neuer Funktionen annehmen: