Bu sayfada, aşağıdakiler dahil olmak üzere Maven'den Bazel'e nasıl geçiş yapılacağı açıklanmaktadır: yükleme adımlarını anlatacağız. Maven arasındaki farklar açıklanmaktadır. ve Bazel ile birlikte Guava projesini kullanarak bir taşıma örneği sundu.
Herhangi bir derleme aracından Bazel'e taşıma işlemi yaparken, en iyi seçenek her iki derleme aracına da siz geliştirme ekibinizi, CI ve sistemleri ve diğer alakalı sistemleri içerir. Maven ve Bazel'i aynı anda çalıştırabilirsiniz depodur.
Başlamadan önce
- Yüklü değilse Bazel'i yükleyin.
- Bazel'i kullanmaya yeni başladıysanız Bazel'e giriş: Taşıma işlemine başlamadan önce Java'yı derleyin. Eğiticide Bazel'in kavramları, yapısı ve etiket söz dizimi.
Maven ile Bazel arasındaki farklar
- Maven üst düzey
pom.xml
dosya kullanır. Bazel, birden fazla derleme dosyasını destekler veBUILD
dosyası başına birden fazla hedef belirleyerek daha yüksek performanslı derlemelere olanak tanır artımlı sonuçlar elde etti. - Maven, dağıtım sürecinin adımlarından sorumludur. Bazel otomatikleştirmelerini sağlar.
- Bazel, diller arasındaki bağımlılıkları ifade etmenizi sağlar.
- Projeye yeni bölümler ekledikçe Bazel’la birlikte bazı yeni bölümler eklemeniz
BUILD
dosya. En iyi uygulama, her yeni Java'ya birBUILD
dosyası eklemektir paketinden yararlanın.
Maven'den Bazel'e geçiş
Aşağıdaki adımlarda projenizi Bazel'e nasıl taşıyacağınız açıklanmaktadır:
- MODULE.bazel dosyasını oluşturma
- Bir BUILD dosyası oluşturun
- Daha fazla BUILD dosyası oluşturun
- Bazel kullanarak derleme
Aşağıdaki örnekler Guava'nın göçünden alınmıştır
projesi arasında geçiş yapabilirsiniz. İlgili içeriği oluşturmak için kullanılan
Kullanılan Guava projesi v31.1
yayınlandı. Guava'nın kullanıldığı örneklerde
her adımını tamamlar, ancak bu sayfada yer alan
taşıma işlemi için manuel olarak oluşturulur veya eklenir.
$ git clone https://github.com/google/guava.git && cd guava
$ git checkout v31.1
1. MODULE.bazel dosyasını oluşturma
Projenizin kökünde MODULE.bazel
adlı bir dosya oluşturun. Projeniz
dış bağımlılığı yoksa bu dosya boş olabilir.
Projeniz,
projedeki harici bağımlılıkları MODULE.bazel
dosyası olarak kaydedebilirsiniz. Maven'den bağımlılıkları yönetmek için rules_jvm_external
kullanabilirsiniz. Örneğin,
Bu kural kümesini kullanma talimatlarını öğrenmek için
README
,
Guava projesi örneği: dış bağımlılıklar
Guava’nın dış bağımlılıklarını listeleyebilirsiniz.
rules_jvm_external
kural kümesi oluşturur.
MODULE.bazel
dosyasına aşağıdaki snippet'i ekleyin:
bazel_dep(name = "rules_jvm_external", version = "6.2")
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
maven.install(
artifacts = [
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.errorprone:error_prone_annotations:2.11.0",
"com.google.j2objc:j2objc-annotations:1.3",
"org.codehaus.mojo:animal-sniffer-annotations:1.20",
"org.checkerframework:checker-qual:3.12.0",
],
repositories = [
"https://repo1.maven.org/maven2",
],
)
use_repo(maven, "maven")
2. Bir BUILD dosyası oluşturun
Artık çalışma alanınızı tanımladığınıza göre (varsa)
varsa, mobil uygulamanızın nasıl kullanıldığını açıklamak için BUILD
dosyaları
gerekli olduğunu unutmayın. Maven'in aksine, tek pom.xml
dosyası olan Bazel
birçok BUILD
dosyasına sahip olmanız gerekir. Bu dosyalar birden fazla derlemeyi belirtiyor
Bu izin, Bazel'in artımlı derlemeler üretmesine olanak tanır.
BUILD
dosyayı aşamalar halinde ekleyin. Kök kısmına bir BUILD
dosyası ekleyerek başlayın
ve Bazel'ı kullanarak ilk derlemede bu projeyi
nasıl kullanacağınızı öğreneceksiniz. Daha sonra
daha ayrıntılı hedefler içeren daha fazla BUILD
dosyası ekleyerek derlemenize.
MODULE.bazel
dosyanızla aynı dizinde, bir metin dosyası oluşturun veBUILD
olarak adlandıralım.Bu
BUILD
dosyasında uygun kuralı kullanarak bir hedef oluşturmak için akılda kalıcı bir yolunu sunar. Aşağıda bazı ipuçları verilmiştir:Uygun kuralı kullanın:
Tek bir Maven modülüyle proje oluşturmak için
java_library
kuralı şöyledir:java_library( name = "everything", srcs = glob(["src/main/java/**/*.java"]), resources = glob(["src/main/resources/**"]), deps = ["//:all-external-targets"], )
Birden fazla Maven modülü olan projeler oluşturmak için
java_library
kuralı şöyledir:java_library( name = "everything", srcs = glob([ "Module1/src/main/java/**/*.java", "Module2/src/main/java/**/*.java", ... ]), resources = glob([ "Module1/src/main/resources/**", "Module2/src/main/resources/**", ... ]), deps = ["//:all-external-targets"], )
İkili programlar oluşturmak için
java_binary
kuralını kullanın:java_binary( name = "everything", srcs = glob(["src/main/java/**/*.java"]), resources = glob(["src/main/resources/**"]), deps = ["//:all-external-targets"], main_class = "com.example.Main" )
Özellikleri belirtin:
name
: Hedefe anlamlı bir ad verin. Örneklerde yukarıdaki hedefe "her şey" denir.srcs
: Projenizdeki tüm .java dosyalarını listelemek için globbing'i kullanın.resources
: Projenizdeki tüm kaynakları listelemek için globbing'i kullanın.deps
: Projenizin hangi dış bağımlılıklarını üzerine konuşacağız.
Aşağıdaki üst düzey BUILD örneğine göz atın. dosyası olarak yükleyin.
Artık projenizin kökünde bir
BUILD
dosyası olduğuna göre bir proje yöneticisi olarak düşünebilirsiniz. Komut satırında, çalışma alanınızda dizinini kullanmak için Bazel ile projenizi oluşturmak üzerebazel build //:everything
kullanın.Proje artık Bazel ile başarıyla tamamlanmış durumda. Şunları eklemeniz gerekiyor: Projenin artımlı derlemelerine olanak tanımak için daha fazla
BUILD
dosyası.
Guava projesi örneği: Bir BUILD dosyasıyla başlama
Guava projesini Bazel'e taşırken başlangıçta bir BUILD
dosyası kullanılır.
geliştirmenizi sağlar. Bu ilk BUILD
dosyasının içeriği
çalışma alanı dizini:
java_library(
name = "everything",
srcs = glob([
"guava/src/**/*.java",
"futures/failureaccess/src/**/*.java",
]),
javacopts = ["-XepDisableAllChecks"],
deps = [
"@maven//:com_google_code_findbugs_jsr305",
"@maven//:com_google_errorprone_error_prone_annotations",
"@maven//:com_google_j2objc_j2objc_annotations",
"@maven//:org_checkerframework_checker_qual",
"@maven//:org_codehaus_mojo_animal_sniffer_annotations",
],
)
3. Daha fazla BUILD dosyası oluşturun (isteğe bağlı)
Aşağıdaki işlemleri tamamladıktan sonra gördüğünüz gibi Bazel, tek bir BUILD file
ile çalışır.
ilk derlememiz var. Yine de binayı her bir görev için daha küçük
Ayrıntılı hedeflere sahip daha fazla BUILD
dosyası ekleniyor.
Birden çok hedefe sahip birden fazla BUILD
dosyası, derlemenin artmasına yardımcı olur
ayrıntı düzeyi sağlar. Böylece:
- düzenli toplantılar yapmak,
- paralel olarak yürütülürse
- ve derlemenin gelecekteki kullanıcılar için daha iyi korunmasını ve
- Paketler arasındaki hedeflerin görünürlüğü üzerinde kontrol sahibi olmanızı sağlar. Bu da, uygulama ayrıntılarının bulunduğu kitaplıklar gibi, herkese açık API'ler.
Daha fazla BUILD
dosyası ekleme ile ilgili ipuçları:
- Her Java paketine bir
BUILD
dosyası ekleyerek başlayabilirsiniz. Java ile başlayın ve en az sayıda bağımlılığı olan paketler ve paketlere başlamanızı sağlar. en çok ihtiyaç duyanlar. BUILD
dosyaları ekleyip hedef belirlerken bu yeni hedefleri Hedeflerin bunlara bağlıdeps
bölümü.glob()
işlevi, paket sınırlarını geçmediğinden, paket sayısı büyüttüğünde,glob()
ile eşleşen dosyalar küçülür.main
dizinineBUILD
dosyası eklediğinizdeBUILD
dosyasını ilgilitest
dizinine ekleyin.- Paketler arasında görünürlüğü uygun şekilde sınırlandırmaya dikkat edin.
BUILD
dosyaları kurulumunuzdaki hataları gidermeyi kolaylaştırmak için şunları kontrol edin: her derleme dosyası ekledikçe projenin Bazel ile derlemeye devam ettiğini göreceksiniz. Tüm hedeflerinizin oluşturulmaya devam ettiğinden emin olmak içinbazel build //...
komutunu çalıştırın.
4. Bazel kullanarak derleme
Kurulumu doğrulamak için BUILD
dosyaları eklerken Bazel'ı kullanarak oluşturuyorsunuz
bahsedeceğim.
İstediğiniz ayrıntı düzeyinde BUILD
dosyanız olduğunda Bazel'ı kullanarak
üretmenize yardımcı olur.