Bu sayfada, aşağıdakiler de dahil olmak üzere Maven'den Bazel'e nasıl geçiş yapılacağı açıklanmaktadır: yükleme adımlarını anlatacağız. Farklılıkları anlatır ve Guava projesi.
Herhangi bir derleme aracından Bazel'e taşıma yaparken, en iyi seçenek her iki geliştirme ekibinizi tamamen taşıyıncaya kadar birbirine paralel olarak çalışan araçlar CI sistemi ve diğer ilgili sistemler. Maven ve Bazel'i çalıştırmak için olmasını sağlar.
Başlamadan önce
- Yüklü değilse Bazel'i yükleyin.
- Bazel'i kullanmaya yeni başladıysanız eğiticiyi inceleyin Başlamadan önce Bazel'e giriş: Java'yı derleme yardımcı olur. Eğiticide Bazel'in kavramları, yapısı ve etiketi açıklanıyor söz dizimine uygun olmalıdır.
Maven ile Bazel arasındaki farklar
- Maven üst düzey
pom.xml
dosya kullanır. Bazel birden fazla derlemeyi destekler dosyalar veBUILD
dosyası başına birden fazla hedef oluşturarak artımlı veriler elde etti. - Maven, dağıtım sürecinin adımlarından sorumludur. Bazel dağıtımı otomatikleştirmez.
- 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 paketine birBUILD
dosyası eklemektir.
Maven'den Bazel'e geçiş
Aşağıdaki adımlarda projenizi Bazel'e nasıl taşıyacağınız açıklanmaktadır:
- WORKSPACE dosyasını oluşturun
- Bir BUILD dosyası oluşturun
- Daha fazla BUILD dosyası oluşturun
- Bazel kullanarak derleme
Aşağıdaki örnekler,
Maven'den Bazel'e Guava projesi.
Kullanılan Guava projesi v31.1
tarihinde yayınlandı. Guava'nın kullanıldığı örneklerde
her adımda oluşturduğunuz bu dosyalar ve içerikler
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. WORKSPACE dosyasını oluşturun
Projenizin kökünde WORKSPACE
adlı bir dosya oluşturun. Projeniz
harici bağımlılığı yoksa Workspace dosyası boş olabilir.
Projeniz,
dizinlerini yüklemek istiyorsanız, çalışma alanında bu harici bağımlılıkları belirtin
dosyası olarak kaydedebilirsiniz. Çalışma alanı dosyası için harici bağımlılıkların listesini otomatikleştirmek amacıyla:
rules_jvm_external
kullanın. Bu kural kümesini kullanma talimatları için şuraya bakın:
BENİOKU.
Guava projesi örneği: dış bağımlılıklar
Projenin dış bağımlılıklarını
Guava projesi
rules_jvm_external
kural kümesi oluşturur.
WORKSPACE
dosyasına aşağıdaki snippet'i ekleyin:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
RULES_JVM_EXTERNAL_TAG = "4.3"
RULES_JVM_EXTERNAL_SHA = "6274687f6fc5783b589f56a2f1ed60de3ce1f99bc4e8f9edef3de43bdf7c6e74"
http_archive(
name = "rules_jvm_external",
sha256 = RULES_JVM_EXTERNAL_SHA,
strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)
load("@rules_jvm_external//:defs.bzl", "maven_install")
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",
],
)
2. Bir BUILD dosyası oluşturun
Artık çalışma alanınızı tanımladığınıza göre (varsa)
projenizin nasıl takip edildiğini açıklamak için BUILD
dosyaları
oluşturulmalıdır. Tek pom.xml
dosyası olan Maven'in aksine, Bazel birçok
Proje derlemek için BUILD
dosya. Bu dosyalar birden fazla derleme hedefi belirtiyor.
Bu da Bazel'ın artımlı derlemeler üretmesine olanak tanır.
BUILD
dosyayı aşamalar halinde ekleyin. Bir BUILD
dosyası ekleyerek başlayın
kökünü oluşturmak ve Bazel'ı kullanarak ilk derlemeyi yapmak için bu kodu kullanmaktır.
Ardından, daha ayrıntılı BUILD
dosyası ekleyerek derlemenizi hassaslaştırırsınız.
belirler.
WORKSPACE
dosyanızla aynı dizinde, bir metin dosyası oluşturun veBUILD
olarak adlandıralım.Bu
BUILD
dosyasında, uygun kuralı kullanarak tek bir hedef oluşturun: bahsedeceğiz. 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. Yukarıdaki örneklerde, 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. Örneğin, herkese açık olmayan vegenerate_workspace
aracını kullanan bağımlılıkları,java_library
içingenerated_java_libraries
makrosu.
Şu bölüme göz atın: aşağıdaki üst düzey BUILD dosyasının bir örneğini göçü anlamışsınızdır.
Artık projenizin kökünde bir
BUILD
dosyanız olduğuna göre projenizi planlarken onlardan da emin olmanız gerekir. Komut satırında, çalışma alanı dizininizi oluşturmak içinbazel build //:everything
kullanın birlikte çalıştık.Proje artık Bazel ile başarıyla tamamlanmış durumda. Şunlar gerekir: projenin artımlı derlemelerine olanak tanımak için daha fazla
BUILD
dosyası ekleyin.
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
tek bir yerde toplamak
sizin görevinizdir. Bu ilk BUILD
içeriğinin içeriği
dosyasını yükleyin:
java_library(
name = "everything",
srcs = glob([
"guava/src/**/*.java",
"futures/failureaccess/src/**/*.java",
]),
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ı)
İlk adımınızı tamamladıktan sonra gördüğünüz gibi Bazel yalnızca bir BUILD file
ile çalışıyor.
seçeceğiz. 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. Şununla başlayın: En az bağımlılığa sahip olan ve sizi artıran Java paketleri en fazla bağımlılığı olan paketler olarak düşünebilirsiniz. BUILD
dosyaları ekleyip hedef belirlerken bu yeni hedefleri Hedeflerin bunlara bağlıdeps
bölümü.glob()
fonksiyonunun paket sınırlarını geçmediğinden, sayı oranında paket büyür,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 ekledikçe projenin Bazel ile dosyası olarak kaydedebilirsiniz. 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'i kullanabilirsiniz.
üretmenize yardımcı olur.