Bu sayfada, ön koşullar ve yükleme adımları da dahil olmak üzere Maven'den Bazel'e nasıl geçiş yapılacağı açıklanmaktadır. Maven ile Bazel arasındaki farkları açıklar ve Guava projesini kullanarak bir taşıma örneği sunar.
Herhangi bir derleme aracından Bazel'e geçiş yaparken, geliştirme ekibinizi, sürekli entegrasyon sisteminizi ve diğer ilgili sistemleri tamamen taşıyana kadar her iki derleme aracının da paralel olarak çalışması en iyisidir. Maven ve Bazel'i aynı depoda çalıştırabilirsiniz.
Başlamadan önce
- Henüz yüklenmediyse Bazel'i yükleyin.
- Bazel'i yeni kullanmaya başladıysanız taşıma işlemine başlamadan önce Introduction to Bazel: Build Java (Bazel'e Giriş: Java Oluşturma) adlı eğitime göz atın. Bu eğitimde Bazel'in kavramları, yapısı ve etiket söz dizimi açıklanmaktadır.
Maven ile Bazel arasındaki farklar
- Maven, üst düzey
pom.xml
dosyalarını kullanır. Bazel,BUILD
dosyası başına birden fazla derleme dosyasını ve birden fazla hedefi destekleyerek Maven'in derlemelerinden daha artımlı derlemelere olanak tanır. - Maven, dağıtım sürecindeki adımları yönetir. Bazel, dağıtımı otomatikleştirmez.
- Bazel, diller arasındaki bağımlılıkları ifade etmenize olanak tanır.
- Projeye yeni bölümler ekledikçe Bazel ile yeni
BUILD
dosyalar eklemeniz gerekebilir. En iyi uygulama, her yeni Java paketine birBUILD
dosyası eklemektir.
Maven'den Bazel'e taşıma
Aşağıdaki adımlarda projenizi Bazel'e nasıl taşıyacağınız açıklanmaktadır:
- MODULE.bazel dosyasını oluşturun
- Tek bir BUILD dosyası oluşturma
- Daha fazla BUILD dosyası oluşturma
- Bazel kullanarak derleme
Aşağıdaki örnekler, Guava projesinin Maven'den Bazel'e taşınmasıyla ilgilidir. Kullanılan Guava projesi v31.1
sürümüdür. Guava'nın kullanıldığı örneklerde taşıma işleminin her adımı açıklanmamaktadır ancak taşıma işlemi için oluşturulan veya manuel olarak eklenen dosyalar ve içerikler gösterilmektedir.
$ git clone https://github.com/google/guava.git && cd guava
$ git checkout v31.1
1. MODULE.bazel dosyasını oluşturun
Projenizin kök dizininde MODULE.bazel
adlı bir dosya oluşturun. Projenizin harici bağımlılıkları yoksa bu dosya boş olabilir.
Projeniz, proje dizinlerinden birinde bulunmayan dosyalara veya paketlere bağlıysa bu harici bağımlılıkları MODULE.bazel dosyasında belirtin. Maven'deki bağımlılıkları yönetmek için rules_jvm_external
hesabını kullanabilirsiniz. Bu kural grubunu kullanmayla ilgili talimatlar için README dosyasına bakın.
Guava projesi örneği: harici bağımlılıklar
Guava projesinin dış bağımlılıklarını rules_jvm_external
kural grubuyla listeleyebilirsiniz.
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.
Çalışma alanınızı tanımlayıp harici bağımlılıkları (varsa) listelediğinize göre, projenizin nasıl oluşturulması gerektiğini açıklayan BUILD
dosyaları oluşturmanız gerekir. Tek bir pom.xml
dosyası olan Maven'in aksine Bazel, bir projeyi oluşturmak için birçok BUILD
dosyası kullanabilir. Bu dosyalar, Bazel'in artımlı derlemeler oluşturmasına olanak tanıyan birden fazla derleme hedefi belirtir.
BUILD
dosyaları aşamalar halinde ekleyin. Projenizin kök dizinine bir BUILD
dosyası ekleyerek ve bu dosyayı kullanarak Bazel ile ilk derlemeyi yaparak başlayın. Ardından, daha ayrıntılı hedeflere sahip daha fazla BUILD
dosya ekleyerek derlemenizi iyileştirirsiniz.
MODULE.bazel
dosyanızla aynı dizinde bir metin dosyası oluşturun ve dosyayıBUILD
olarak adlandırın.Bu
BUILD
dosyasında, projenizi oluşturmak için tek bir hedef oluşturmak üzere uygun kuralı kullanın. 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ını aşağıdaki gibi kullanın:java_library( name = "everything", srcs = glob(["src/main/java/**/*.java"]), resources = glob(["src/main/resources/**"]), deps = ["//:all-external-targets"], )
Birden fazla Maven modülü içeren projeler oluşturmak için
java_library
kuralını aşağıdaki gibi kullanın: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 dosyalar 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 hedef "her şey" olarak adlandırılır.srcs
: Projenizdeki tüm .java dosyalarını listelemek için globbing kullanın.resources
: Projenizdeki tüm kaynakları listelemek için globbing kullanın.deps
: Projenizin hangi harici bağımlılıklara ihtiyacı olduğunu belirlemeniz gerekir.
Guava projesinin taşınmasıyla ilgili bu üst düzey BUILD dosyasının aşağıdaki örneğine göz atın.
Artık projenizin kök dizininde bir
BUILD
dosyanız olduğuna göre, projenizin çalıştığından emin olmak için projenizi oluşturun. Komut satırında, çalışma alanı dizininizdenbazel build //:everything
komutunu kullanarak projenizi Bazel ile oluşturun.Proje artık Bazel ile başarıyla oluşturuldu. Projenin artımlı derlemelerine izin vermek için daha fazla
BUILD
dosyası eklemeniz gerekir.
Guava projesi örneği: Bir BUILD dosyasıyla başlama
Guava projesi Bazel'e taşınırken başlangıçta tüm projeyi oluşturmak için tek bir BUILD
dosyası kullanılır. Çalışma alanı dizinindeki bu ilk BUILD
dosyasının içeriği aşağıda verilmiştir:
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şturma (isteğe bağlı)
İlk derlemenizi tamamladıktan sonra gördüğünüz gibi Bazel, tek bir BUILD file
ile çalışır. Yine de ayrıntılı hedeflere sahip daha fazla BUILD
dosyası ekleyerek derlemeyi daha küçük parçalara bölmeyi düşünebilirsiniz.
Birden fazla hedef içeren birden fazla BUILD
dosyası, derlemeye daha fazla ayrıntı düzeyi kazandırarak şunlara olanak tanır:
- projenin artımlı derlemelerinin artması,
- derlemenin paralel yürütülmesini artırın,
- Gelecekteki kullanıcılar için derlemenin daha iyi bakımı ve
- Paketler arasındaki hedeflerin görünürlüğünü kontrol ederek, kitaplıkların herkese açık API'lere sızan uygulama ayrıntılarını içermesi gibi sorunları önleyebilirsiniz.
Daha fazla BUILD
dosya eklemeyle ilgili ipuçları:
- Her Java paketine bir
BUILD
dosyası ekleyerek başlayabilirsiniz. En az bağımlılığı olan Java paketleriyle başlayın ve en çok bağımlılığı olan paketlere doğru ilerleyin. BUILD
dosyaları ekleyip hedefleri belirlerken bu yeni hedefleri, kendilerine bağlı olan hedeflerindeps
bölümlerine ekleyin.glob()
işlevinin paket sınırlarını aşmadığını unutmayın. Bu nedenle, paket sayısı arttıkçaglob()
ile eşleşen dosyalar azalır.BUILD
dosyasınımain
dizinine her eklediğinizde, ilgilitest
dizinine deBUILD
dosyası eklediğinizden emin olun.- Paketler arasındaki görünürlüğü uygun şekilde sınırlamaya dikkat edin.
BUILD
dosyalarının kurulumunda hataları gidermeyi kolaylaştırmak için her derleme dosyasını eklerken projenin Bazel ile derlenmeye devam ettiğinden emin olun. Tüm hedeflerinizin oluşturulmaya devam ettiğinden emin olmak içinbazel build //...
komutunu çalıştırın.
4. Bazel kullanarak derleme
Derlemenin kurulumunu doğrulamak için BUILD
dosyaları eklerken Bazel'i kullanarak geliştirme yapıyorsunuz.
İstediğiniz ayrıntı düzeyinde BUILD
dosyanız olduğunda tüm derlemelerinizi oluşturmak için Bazel'i kullanabilirsiniz.