โครงการนี้ใช้ชุดไบนารีที่ได้รับอนุญาตภายใต้ข้อตกลงผู้ใช้ 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
โดยปกติเวอร์ชันเบต้าจะถูกอัปโหลดไปยังช่องเบต้า 2 สัปดาห์ก่อนที่จะเผยแพร่เต็มรูปแบบ วิธีติดตั้ง:
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 ที่เผยแพร่ไปยังช่องทางเสถียรของ JetBrainslatest-stable
คือ IDE เวอร์ชันล่าสุดที่รองรับโดยปลั๊กอิน Bazel ที่เผยแพร่ไปยังช่องทางเสถียรของ JetBrainsunder-dev
เป็นเวอร์ชัน IDE ที่เรากำลังดำเนินการเพื่อรองรับสามารถดูเวอร์ชัน IDE ที่เกี่ยวข้องในปัจจุบันของนามแฝงเหล่านี้ได้ที่นี่
เรายินดีสนับสนุนการสนับสนุน IDE เวอร์ชันใหม่ อย่างไรก็ตาม เพื่อให้กระบวนการตรวจสอบเร็วขึ้นและง่ายขึ้น เราขอแนะนำดังต่อไปนี้:
เรายอมรับได้เฉพาะคำขอดึงข้อมูลขนาดเล็กเท่านั้น คำขอดึงที่น้อยกว่ามีแนวโน้มที่จะมีความคิดเห็นเกี่ยวกับรีวิวน้อยกว่า จึงสามารถส่งได้เร็วกว่ามาก พวกเขายังมีแนวโน้มที่จะขัดแย้งกับฐานโค้ดภายในของเราน้อยลง ซึ่งทำให้การรวมระบบง่ายขึ้นสำหรับเรา ตัวอย่างเช่น คุณควรมีคำขอดึงข้อมูลแยกกัน โดยแต่ละคำขอมุ่งเน้นไปที่การเปลี่ยนแปลงที่เข้ากันไม่ได้ แทนที่จะมีคำขอดึงขนาดใหญ่เพื่อแก้ไขหลายรายการ
เนื่องจากเรายังคงสนับสนุน IDE เวอร์ชันจำนวนหนึ่งต่อไปในขณะที่กำลังดำเนินการเวอร์ชันใหม่ คุณจึงต้องแน่ใจว่าการเปลี่ยนแปลงที่คุณเสนอจะไม่ทำให้เวอร์ชันเก่าเสียหาย ไปป์ไลน์ที่ส่งล่วงหน้าของเราจะดูแลการทดสอบการเปลี่ยนแปลงของคุณกับเวอร์ชันที่รองรับทั้งหมด และแจ้งให้คุณทราบว่ามีอะไรเสียหายหรือไม่
เพื่ออำนวยความสะดวกในการรวมการเปลี่ยนแปลงของคุณเข้ากับอัปสตรีม เราขอแนะนำให้ทำตามขั้นตอนของเราเพื่อรองรับความเข้ากันได้แบบย้อนหลังของ SDK
ขั้นแรก ให้พิจารณาปรับโค้ดปลั๊กอินเพื่อให้ทำงานได้โดยตรงกับ IDE เวอร์ชันต่างๆ ตัวอย่างกลยุทธ์สำหรับสิ่งนี้คือ:
สำหรับการเปลี่ยนแปลงที่เข้ากันไม่ได้โดยไม่สำคัญ โค้ดสำหรับการรักษาความเข้ากันได้ของ SDK จะอยู่ในไดเร็กทอรี sdkcompat และการทดสอบ/testcompat โดยที่ testing/testcompat
เก็บการเปลี่ยนแปลงความเข้ากันได้ของ SDK สำหรับการทดสอบเท่านั้น แต่ละไดเร็กทอรีจากทั้งสองไดเร็กทอรีมีโฟลเดอร์ย่อยต่อเวอร์ชัน IDE ที่รองรับพร้อมการใช้งานเฉพาะเวอร์ชัน API ภายนอกของคลาสทั้งหมดจะต้องเหมือนกันในเวอร์ชันต่างๆ เพียงแต่การใช้งานอาจแตกต่างกัน เมื่อแนะนำไฟล์ใหม่ในไดเร็กทอรีนี้ ตรวจสอบให้แน่ใจว่าได้ทำซ้ำไฟล์อย่างเหมาะสมในทุกเวอร์ชัน
เราปฏิบัติตามเทคนิคทั้งสามนี้สำหรับการเปลี่ยนแปลงที่เข้ากันไม่ได้โดยไม่สำคัญ
เข้ากันได้
ต้องการอะแดปเตอร์และ Wrapper เมื่อมีการใช้งาน เราเพิ่ม util-class ด้วยเมธอดแบบสแตติกเท่านั้นและคอนสตรัคเตอร์ส่วนตัว และล้อมเมธอดที่เปลี่ยนแปลงด้วยเมธอดสแตติกวิธีใดวิธีหนึ่ง หากการเปลี่ยนแปลงมีขนาดเล็กเพียงพอ คุณไม่จำเป็นต้องสร้าง util-class ใหม่และควรเพิ่มการเปลี่ยนแปลงไปยังคลาส BaseSdkCompat แทน ตัวอย่าง: pr/2345
อะแดปเตอร์
ใช้เมื่อเราขยายคลาสซุปเปอร์และมีการอัปเดตคอนสตรัคเตอร์ เราสร้างคลาสใหม่เพื่อขยายคลาสซุปเปอร์ที่เปลี่ยนแปลง จากนั้นจึงขยายคลาสใหม่นี้จากโค้ดปลั๊กอิน ตัวอย่าง: pr/2352
กระดาษห่อ
สร้างขึ้นเมื่อมีการใช้อินเทอร์เฟซใหม่ในตัวสร้างคลาสระดับสูง เราสร้างคลาส wrapper ที่ wrapper และจัดเตรียมอินเทอร์เฟซเก่าหรืออินเทอร์เฟซใหม่ตามเวอร์ชัน SDK และใช้คลาส wrapper นี้ในโค้ดปลั๊กอิน ตัวอย่าง: pr/2166
การเปลี่ยนแปลงที่เข้ากันได้ทั้งหมดจะต้องแสดงความคิดเห็นด้วย #api{API_VERSION}
เช่น #api203
นี่แสดงถึงเวอร์ชัน API ล่าสุดที่ต้องใช้โค้ด กล่าวคือเวอร์ชันก่อนเวอร์ชันที่คุณต้องการสนับสนุน นี่เป็นสิ่งจำเป็นเพื่อให้ง่ายต่อการค้นหาและล้างฟังก์ชันการทำงานนี้เมื่อปูเวอร์ชันเก่า
คลาสที่เข้ากันได้จะต้องไม่นำเข้าโค้ดปลั๊กอิน และเราพยายามรักษาตรรกะและโค้ดในคลาสเหล่านั้นให้น้อยที่สุดเท่าที่จะทำได้
เรายังอาจยอมรับการมีส่วนร่วมเพื่อแก้ไขปัญหาทั่วไปหรือเพิ่มคุณสมบัติใหม่โดยมีคำเตือนบางประการ: