Maven'den Bazel'e Geçiş

Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

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

Maven ile Bazel arasındaki farklar

  • Maven üst düzey pom.xml dosya kullanır. Bazel, birden fazla derleme dosyasını destekler ve BUILD 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 bir BUILD 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:

  1. MODULE.bazel dosyasını oluşturma
  2. Bir BUILD dosyası oluşturun
  3. Daha fazla BUILD dosyası oluşturun
  4. 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.

  1. MODULE.bazel dosyanızla aynı dizinde, bir metin dosyası oluşturun ve BUILD olarak adlandıralım.

  2. 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.

  3. 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 üzere bazel 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 dizinine BUILD dosyası eklediğinizde BUILD dosyasını ilgili test 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çin bazel 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.