মাভেন থেকে বাজেলে স্থানান্তরিত হচ্ছে

এই পৃষ্ঠাটি বর্ণনা করে কিভাবে Maven থেকে Bazel-এ স্থানান্তর করতে হয়, পূর্বশর্ত এবং ইনস্টলেশনের ধাপগুলি সহ। এটি Maven এবং Bazel এর মধ্যে পার্থক্য বর্ণনা করে এবং Guava প্রকল্প ব্যবহার করে একটি মাইগ্রেশন উদাহরণ প্রদান করে।

যেকোন বিল্ড টুল থেকে Bazel-এ স্থানান্তরিত করার সময়, আপনার ডেভেলপমেন্ট টিম, CI সিস্টেম এবং অন্য কোনও প্রাসঙ্গিক সিস্টেম সম্পূর্ণরূপে স্থানান্তরিত না হওয়া পর্যন্ত উভয় বিল্ড টুল সমান্তরালভাবে চলতে থাকা ভাল। আপনি একই সংগ্রহস্থলে Maven এবং Bazel চালাতে পারেন।

তুমি শুরু করার আগে

Maven এবং Bazel মধ্যে পার্থক্য

  • Maven টপ-লেভেল pom.xml ফাইল(গুলি) ব্যবহার করে। Bazel একাধিক বিল্ড ফাইল এবং প্রতি BUILD ফাইলের একাধিক লক্ষ্য সমর্থন করে, যা মাভেনের চেয়ে বেশি ক্রমবর্ধমান বিল্ডগুলির জন্য অনুমতি দেয়।
  • মাভেন স্থাপনা প্রক্রিয়ার জন্য পদক্ষেপের দায়িত্ব নেয়। Bazel স্থাপনা স্বয়ংক্রিয় করে না.
  • ব্যাজেল আপনাকে ভাষার মধ্যে নির্ভরতা প্রকাশ করতে সক্ষম করে।
  • আপনি প্রকল্পে নতুন বিভাগ যোগ করার সাথে সাথে, Bazel এর সাথে আপনাকে নতুন BUILD ফাইল যোগ করতে হতে পারে। সর্বোত্তম অনুশীলন হল প্রতিটি নতুন জাভা প্যাকেজে একটি BUILD ফাইল যুক্ত করা।

Maven থেকে Bazel এ স্থানান্তর করুন

নীচের ধাপগুলি বর্ণনা করে যে কীভাবে আপনার প্রকল্পটি Bazel-এ স্থানান্তরিত করবেন:

  1. ওয়ার্কস্পেস ফাইল তৈরি করুন
  2. একটি বিল্ড ফাইল তৈরি করুন
  3. আরও BUILD ফাইল তৈরি করুন
  4. Bazel ব্যবহার করে তৈরি করুন

নীচের উদাহরণগুলি মাভেন থেকে বাজেলে পেয়ারা প্রকল্পের স্থানান্তর থেকে এসেছে। পেয়ারা প্রজেক্টটি রিলিজ v31.1 . গুয়াভা ব্যবহার করে উদাহরণগুলি মাইগ্রেশনের প্রতিটি ধাপের মধ্য দিয়ে যায় না, তবে তারা ফাইল এবং বিষয়বস্তুগুলি দেখায় যা মাইগ্রেশনের জন্য ম্যানুয়ালি তৈরি বা যোগ করা হয়।

$ git clone https://github.com/google/guava.git && cd guava
$ git checkout v31.1

1. ওয়ার্কস্পেস ফাইল তৈরি করুন

আপনার প্রজেক্টের মূলে WORKSPACE নামে একটি ফাইল তৈরি করুন। যদি আপনার প্রকল্পের কোনো বাহ্যিক নির্ভরতা না থাকে, তাহলে ওয়ার্কস্পেস ফাইলটি খালি হতে পারে।

যদি আপনার প্রোজেক্ট ফাইল বা প্যাকেজগুলির উপর নির্ভর করে যেগুলি প্রোজেক্টের ডিরেক্টরিগুলির একটিতে নেই, তাহলে ওয়ার্কস্পেস ফাইলে এই বাহ্যিক নির্ভরতাগুলি নির্দিষ্ট করুন। ওয়ার্কস্পেস ফাইলের জন্য বাহ্যিক নির্ভরতাগুলির তালিকা স্বয়ংক্রিয় করতে, rules_jvm_external ব্যবহার করুন। এই রুলসেট ব্যবহার করার নির্দেশাবলীর জন্য, README দেখুন।

পেয়ারা প্রকল্পের উদাহরণ: বাহ্যিক নির্ভরতা

আপনি rules_jvm_external ruleset এর সাথে গুয়াভা প্রকল্পের বাহ্যিক নির্ভরতা তালিকাভুক্ত করতে পারেন।

WORKSPACE ফাইলে নিম্নলিখিত স্নিপেট যোগ করুন:

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. একটি বিল্ড ফাইল তৈরি করুন

এখন যেহেতু আপনার ওয়ার্কস্পেস সংজ্ঞায়িত করা হয়েছে এবং বাহ্যিক নির্ভরতা (যদি প্রযোজ্য হয়) তালিকাভুক্ত রয়েছে, আপনার প্রকল্পটি কীভাবে তৈরি করা উচিত তা বর্ণনা করার জন্য আপনাকে BUILD ফাইল তৈরি করতে হবে। Maven এর একটি pom.xml ফাইলের বিপরীতে, Bazel একটি প্রকল্প তৈরি করতে অনেক BUILD ফাইল ব্যবহার করতে পারে। এই ফাইলগুলি একাধিক বিল্ড লক্ষ্য নির্দিষ্ট করে, যা Bazel কে ক্রমবর্ধমান বিল্ড তৈরি করতে দেয়।

পর্যায়ক্রমে BUILD ফাইল যোগ করুন। আপনার প্রকল্পের মূলে একটি BUILD ফাইল যোগ করে শুরু করুন এবং এটি ব্যাজেল ব্যবহার করে একটি প্রাথমিক বিল্ড করতে ব্যবহার করুন। তারপর, আপনি আরও দানাদার লক্ষ্যগুলির সাথে আরও BUILD ফাইল যুক্ত করে আপনার বিল্ডকে পরিমার্জন করুন৷

  1. আপনার WORKSPACE ফাইলের মতো একই ডিরেক্টরিতে, একটি পাঠ্য ফাইল তৈরি করুন এবং এটিকে BUILD নাম দিন।

  2. এই BUILD ফাইলে, আপনার প্রকল্প তৈরি করতে একটি লক্ষ্য তৈরি করতে উপযুক্ত নিয়ম ব্যবহার করুন। এখানে কিছু টিপস আছে:

    • উপযুক্ত নিয়ম ব্যবহার করুন:

      • একটি একক Maven মডিউল দিয়ে প্রকল্প তৈরি করতে, java_library নিয়মটি নিম্নরূপ ব্যবহার করুন:

        java_library(
            name = "everything",
            srcs = glob(["src/main/java/**/*.java"]),
            resources = glob(["src/main/resources/**"]),
            deps = ["//:all-external-targets"],
        )
        
      • একাধিক Maven মডিউল সহ প্রকল্পগুলি তৈরি করতে, java_library নিয়মটি ব্যবহার করুন:

        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"],
        )
        
      • বাইনারি তৈরি করতে, java_binary নিয়ম ব্যবহার করুন:

        java_binary(
            name = "everything",
            srcs = glob(["src/main/java/**/*.java"]),
            resources = glob(["src/main/resources/**"]),
            deps = ["//:all-external-targets"],
            main_class = "com.example.Main"
        )
        
    • গুণাবলী নির্দিষ্ট করুন:

      • name : লক্ষ্যকে একটি অর্থপূর্ণ নাম দিন। উপরের উদাহরণগুলিতে, লক্ষ্যটিকে "সবকিছু" বলা হয়।
      • srcs : আপনার প্রজেক্টের সমস্ত .java ফাইল তালিকাভুক্ত করতে গ্লোবিং ব্যবহার করুন।
      • resources : আপনার প্রোজেক্টের সমস্ত রিসোর্স তালিকাভুক্ত করতে গ্লবিং ব্যবহার করুন।
      • deps : আপনার প্রকল্পের জন্য কোন বাহ্যিক নির্ভরতা প্রয়োজন তা আপনাকে নির্ধারণ করতে হবে। উদাহরণস্বরূপ, যদি আপনি generate_workspace টুল ব্যবহার করে বাহ্যিক নির্ভরতার একটি তালিকা তৈরি করেন, java_library এর নির্ভরতাগুলি generated_java_libraries ম্যাক্রোতে তালিকাভুক্ত লাইব্রেরি।
    • গুয়াভা প্রকল্পের স্থানান্তর থেকে এই শীর্ষ-স্তরের বিল্ড ফাইলের নীচের উদাহরণটি দেখুন

  3. এখন আপনার প্রকল্পের মূলে একটি BUILD ফাইল রয়েছে, এটি কাজ করে তা নিশ্চিত করতে আপনার প্রকল্পটি তৈরি করুন। কমান্ড লাইনে, আপনার ওয়ার্কস্পেস ডিরেক্টরি থেকে, bazel build //:everything ব্যবহার করুন Bazel দিয়ে আপনার প্রজেক্ট তৈরি করতে।

    প্রকল্পটি এখন সফলভাবে ব্যাজেল দিয়ে নির্মিত হয়েছে। প্রোজেক্টের ক্রমবর্ধমান বিল্ড করার জন্য আপনাকে আরও BUILD ফাইল যোগ করতে হবে।

পেয়ারা প্রকল্পের উদাহরণ: একটি বিল্ড ফাইল দিয়ে শুরু করুন

পেয়ারা প্রকল্পটি বাজেলে স্থানান্তরিত করার সময়, প্রাথমিকভাবে একটি BUILD ফাইল পুরো প্রকল্পটি তৈরি করতে ব্যবহৃত হয়। এখানে ওয়ার্কস্পেস ডিরেক্টরিতে এই প্রাথমিক BUILD ফাইলের বিষয়বস্তু রয়েছে:

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. আরও বিল্ড ফাইল তৈরি করুন (ঐচ্ছিক)

Bazel শুধুমাত্র একটি BUILD file সাথে কাজ করে, যেমন আপনি আপনার প্রথম বিল্ড সম্পূর্ণ করার পরে দেখেছেন। দানাদার লক্ষ্যগুলির সাথে আরও BUILD ফাইল যুক্ত করে আপনার এখনও বিল্ডটিকে ছোট অংশে ভাঙ্গার কথা বিবেচনা করা উচিত।

একাধিক লক্ষ্য সহ একাধিক BUILD ফাইলগুলি বিল্ডকে বর্ধিত গ্রানুলারিটি দেবে, অনুমতি দেবে:

  • প্রকল্পের বর্ধিত বৃদ্ধি,
  • বিল্ডের সমান্তরাল সম্পাদন বৃদ্ধি,
  • ভবিষ্যতের ব্যবহারকারীদের জন্য বিল্ডের আরও ভাল রক্ষণাবেক্ষণযোগ্যতা, এবং
  • প্যাকেজগুলির মধ্যে লক্ষ্যগুলির দৃশ্যমানতার উপর নিয়ন্ত্রণ, যা লাইব্রেরিগুলির বাস্তবায়নের বিবরণ পাবলিক APIগুলিতে ফাঁস হওয়ার মতো সমস্যাগুলি প্রতিরোধ করতে পারে।

আরও BUILD ফাইল যোগ করার জন্য টিপস:

  • আপনি প্রতিটি জাভা প্যাকেজে একটি BUILD ফাইল যোগ করে শুরু করতে পারেন। জাভা প্যাকেজগুলি দিয়ে শুরু করুন যেগুলির মধ্যে সবচেয়ে কম নির্ভরতা রয়েছে এবং সর্বাধিক নির্ভরতা সহ প্যাকেজগুলি পর্যন্ত কাজ করে৷
  • আপনি BUILD ফাইল যোগ করুন এবং লক্ষ্য নির্দিষ্ট করুন, এই নতুন লক্ষ্যগুলি তাদের উপর নির্ভরশীল লক্ষ্যগুলির deps বিভাগে যোগ করুন। মনে রাখবেন যে glob() ফাংশন প্যাকেজের সীমানা অতিক্রম করে না, তাই প্যাকেজের সংখ্যা বাড়ার সাথে সাথে glob() এর সাথে মিলে যাওয়া ফাইলগুলি সঙ্কুচিত হবে।
  • যে কোনো সময় আপনি একটি main ডিরেক্টরিতে একটি BUILD ফাইল যোগ করেন, নিশ্চিত করুন যে আপনি সংশ্লিষ্ট test ডিরেক্টরিতে একটি BUILD ফাইল যোগ করেছেন।
  • প্যাকেজগুলির মধ্যে দৃশ্যমানতা সঠিকভাবে সীমাবদ্ধ করার যত্ন নিন।
  • আপনার BUILD ফাইলগুলির সেটআপে সমস্যা সমাধানের ত্রুটিগুলি সহজ করতে, আপনি প্রতিটি বিল্ড ফাইল যুক্ত করার সাথে সাথে প্রকল্পটি Bazel এর সাথে তৈরি করা অব্যাহত রয়েছে তা নিশ্চিত করুন৷ আপনার সমস্ত লক্ষ্যগুলি এখনও তৈরি করা নিশ্চিত করতে bazel build //... চালান৷

4. বেজেল ব্যবহার করে তৈরি করুন

আপনি বিল্ডের সেটআপ যাচাই করার জন্য BUILD ফাইল যুক্ত করার সাথে সাথে Bazel ব্যবহার করে নির্মাণ করছেন।

যখন আপনার কাছে কাঙ্ক্ষিত গ্রানুলারিটিতে ফাইলগুলি তৈরি করা থাকে, তখন আপনি আপনার সমস্ত BUILD তৈরি করতে Bazel ব্যবহার করতে পারেন।