Bu sayfada, ön koşullar ve yükleme adımlarıyla birlikte Maven'den Bazel'e nasıl geçiş yapılacağı açıklanmaktadır. Maven ile Bazel arasındaki farklar açıklanmış ve Guava projesini kullanarak bir taşıma örneği sağlanmıştır.
Herhangi bir derleme aracından Bazel'e geçiş yaparken geliştirme ekibinizi, CI sistemini ve ilgili diğer sistemleri tamamen taşıyana kadar her iki derleme aracının aynı anda çalışmasını sağlamak en iyisidir. Maven ve Bazel'i aynı depoda çalıştırabilirsiniz.
Başlamadan önce
- Henüz yüklemediyseniz Bazel'i yükleyin.
- Bazel'i kullanmaya yeni başladıysanız taşıma işlemine başlamadan önce Bazel'e Giriş: Java'yı Derleme eğiticisini inceleyin. 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ı kullanır. Bazel, Maven'den daha artımlı derlemelere olanak tanıyan birden fazla derleme dosyası veBUILD
dosyası başına birden fazla hedefi destekler. - Maven, dağıtım işlemiyle ilgili adımlardan 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 ile yeni
BUILD
dosyaları eklemeniz gerekebilir. 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şturma
- Bir BUILD dosyası oluşturun
- Daha fazla BUILD dosyası oluşturma
- Bazel'i kullanarak derleme
Aşağıdaki örnekler, Guava projesinin Maven'den Bazel'e taşınmasıyla ilgilidir.
Kullanılan Guava projesi v31.1
tarihinde yayınlandı. Guava'yı kullanan örneklerde taşıma işleminin her adımı açıklanmaz ancak taşıma işlemi için oluşturulan veya manuel olarak eklenen dosyalar ve içerikler gösterilir.
$ git clone https://github.com/google/guava.git && cd guava
$ git checkout v31.1
1. WORKSPACE dosyasını oluşturma
Projenizin kökünde WORKSPACE
adlı bir dosya oluşturun. Projenizde harici bağımlı yoksa çalışma alanı dosyası boş olabilir.
Projeniz projenin dizinlerinde yer almayan dosyalara veya paketlere dayanıyorsa bu harici bağımlılıkları çalışma alanı dosyasında belirtin. Çalışma alanı dosyası için harici bağımlılıkların listelenmesini otomatikleştirmek amacıyla rules_jvm_external
kullanın. Bu kural kümesini kullanma talimatları için BENİ OKU'yu inceleyin.
Guava proje örneği: harici bağımlılıklar
Guava projesinin harici bağımlılıklarını rules_jvm_external
kuralıyla listeleyebilirsiniz.
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
Çalışma alanınızı tanımladığınıza ve varsa harici bağımlılıkları (varsa) listelediğinize göre projenizin nasıl oluşturulması gerektiğini açıklamak için BUILD
dosyaları oluşturmanız gerekir. Tek bir pom.xml
dosyasına sahip Maven'in aksine Bazel, proje 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 belirler.
BUILD
dosyalarını aşamalı olarak ekleyin. Projenizin köküne bir BUILD
dosyası ekleyerek ve Bazel'i kullanarak ilk derleme yapmak için bu dosyayı kullanarak başlayın.
Ardından, daha ayrıntılı hedefler içeren daha fazla BUILD
dosyası ekleyerek derlemenizi hassaslaştırırsınız.
WORKSPACE
dosyanızla aynı dizinde, bir metin dosyası oluşturun ve oluşturduğunuz dosyayaBUILD
adını verin.Bu
BUILD
dosyasında, projenizi oluşturmak için 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ılmıştır.srcs
: Projenizdeki tüm .java dosyalarını listelemek için glob özelliğini kullanın.resources
: Projenizdeki tüm kaynakları listelemek için globbing'i kullanın.deps
: Projenizin hangi dış bağımlılıklara ihtiyaç duyduğunu belirlemeniz gerekiyor. Örneğin,generate_workspace
aracını kullanarak harici bağımlılıkların bir listesini oluşturduysanızjava_library
için bağımlılıklar,generated_java_libraries
makrosunda listelenen kitaplıklardır.
Guava projesinin taşınmasından alınan bu üst düzey BUILD dosyasının örneğine göz atın.
Projenizin kökünde bir
BUILD
dosyanız olduğuna göre, projenizin çalıştığından emin olmak için derleyin. Çalışma alanı dizininizdeki komut satırında, Bazel ile projenizi derlemek içinbazel build //:everything
komutunu kullanın.Proje, Bazel ile başarıyla derlendi. Projenin artımlı derlemelerine olanak tanımak için daha fazla
BUILD
dosyası eklemeniz gerekir.
Guava projesi örneği: Bir BUILD dosyasıyla başlama
Guava projesini Bazel'e taşırken, projenin tamamını oluşturmak için başlangıçta 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",
]),
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 derlemenizi tamamladıktan sonra gördüğünüz gibi, Bazel yalnızca bir BUILD file
ile çalışır. Ayrıntılı hedeflere sahip daha fazla BUILD
dosyası ekleyerek derlemeyi daha küçük parçalara ayırmayı düşünmeniz gerekir.
Birden fazla hedefi olan birden fazla BUILD
dosyası, derlemeye daha fazla ayrıntı düzeyi kazandırır ve aşağıdakilere olanak tanır:
- Projenin artımlı derleme sayısını artırabilir.
- 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üğünü kontrol ederek herkese açık API'lere sızdırılan uygulama ayrıntılarını içeren kitaplıklar gibi sorunları önleyebilirsiniz.
Daha fazla BUILD
dosyası eklemeyle ilgili ipuçları:
- Her Java paketine bir
BUILD
dosyası ekleyerek başlayabilirsiniz. En az bağımlılığa sahip Java paketleriyle başlayın ve en çok bağımlı olan paketlere kadar ilerleyin. BUILD
dosyaları ekleyip hedefleri belirtirken bu yeni hedefleri, bunlara bağlı hedeflerindeps
bölümlerine ekleyin.glob()
işlevinin paket sınırlarını geçmediğini, bu nedenle paket sayısı arttıkçaglob()
ile eşleşen dosyaların küçüleceğini unutmayın.- Bir
main
dizineBUILD
dosyası eklediğinizde, ilgilitest
dizine deBUILD
dosyası eklediğinizden emin olun. - Paketler arasındaki görünürlüğü doğru şekilde sınırlandırın.
BUILD
dosyalarınızın kurulumundaki hataları giderme işlemini basitleştirmek için her bir derleme dosyasını eklerken projenin Bazel ile derlemeye devam etmesini sağlayın. Tüm hedeflerinizin oluşturulmaya devam ettiğinden emin olmak içinbazel build //...
komutunu çalıştırın.
4. Bazel'i kullanarak derleme
Derlemenin kurulumunu doğrulamak için BUILD
dosyaları eklerken Bazel'ı kullanarak derlersiniz.
İstediğiniz ayrıntı düzeyinde BUILD
dosyanız olduğunda tüm derlemelerinizi oluşturmak için Bazel'i kullanabilirsiniz.