मेवन से बेज़ेल पर माइग्रेट करना

किसी समस्या की शिकायत करें सोर्स देखें रात · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

इस पेज में बताया गया है कि Maven से Basel में माइग्रेट कैसे किया जा सकता है. इसमें आवश्यकताएं और इंस्टॉलेशन के चरण. इस टेबल में बताया गया है कि Maven के बीच क्या अंतर है साथ ही, यह Guava प्रोजेक्ट का इस्तेमाल करके माइग्रेशन का उदाहरण दे रही है.

किसी भी बिल्ड टूल से Basel पर माइग्रेट करते समय, दोनों बिल्ड टूल का इस्तेमाल करना सबसे अच्छा रहता है साथ ही चलने के लिए तब तक चलाए जा सकते हैं, जब तक आप अपनी डेवलपमेंट टीम, CI सिस्टम, और कोई अन्य प्रासंगिक सिस्टम है. Maven और Baज़र, दोनों को एक ही साथ चलाया जा सकता है डेटा स्टोर करने की जगह.

शुरू करने से पहले

Maven और Baज़ल के बीच अंतर

  • Maven, टॉप लेवल की pom.xml फ़ाइल(फ़ाइलों) का इस्तेमाल करता है. Babel के साथ कई बिल्ड फ़ाइलें काम करती हैं और हर BUILD फ़ाइल के लिए कई टारगेट. इससे ऐसे बिल्ड मिल सकते हैं जो Maven की तुलना में ज़्यादा है.
  • डिप्लॉयमेंट की प्रोसेस के चरणों को Maven देखता है. बेज़ल ये काम नहीं करते अपने-आप डिप्लॉयमेंट के लिए.
  • Basel की मदद से, आपको अलग-अलग भाषाओं में अपनी डिपेंडेंसी दिखाने की सुविधा मिलती है.
  • प्रोजेक्ट में नए सेक्शन जोड़ने पर, Basel की मदद से आपको नए सेक्शन जोड़ने पड़ सकते हैं BUILD फ़ाइलें. हर नए Java में BUILD फ़ाइल जोड़ना सबसे सही तरीका है पैकेज.

Maven से बेज़ल में माइग्रेट करें

अपने प्रोजेक्ट को Basel में माइग्रेट करने का तरीका नीचे बताया गया है:

  1. MODULE.basel फ़ाइल बनाएं
  2. एक बिल्ड फ़ाइल बनाना
  3. ज़्यादा BUILD फ़ाइलें बनाना
  4. Basel का इस्तेमाल करके ऐप्लिकेशन बनाएं

यहां दिए गए उदाहरण गुआवा के माइग्रेशन से लिए गए हैं प्रोजेक्ट अपग्रेड करने के बाद, Maven से Basel तक कॉन्टेंट बनाने Guava प्रोजेक्ट में v31.1 को रिलीज़ किया गया है. अमरूद का इस्तेमाल करने वाले उदाहरण पैदल नहीं चलते प्रक्रिया के दौरान हर चरण में पूरी जानकारी देता है, लेकिन वे फ़ाइलें और सामग्री दिखाते हैं माइग्रेशन के लिए, मैन्युअल तौर पर जनरेट या जोड़े जाते हैं.

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

1. MODULE.baकोई फ़ाइल बनाएं

अपने प्रोजेक्ट के रूट में MODULE.bazel नाम की फ़ाइल बनाएं. अगर आपका प्रोजेक्ट कोई बाहरी डिपेंडेंसी नहीं है, इसलिए यह फ़ाइल खाली हो सकती है.

अगर आपका प्रोजेक्ट ऐसी फ़ाइलों या पैकेज पर निर्भर है जो प्रोजेक्ट की डायरेक्ट्री का इस्तेमाल किया जा सकता है, तो MODULE.batz में इन बाहरी डिपेंडेंसी के बारे में बताएं फ़ाइल से लिए जाते हैं. Maven की डिपेंडेंसी मैनेज करने के लिए, rules_jvm_external का इस्तेमाल किया जा सकता है. इसके लिए इस नियमसेट का उपयोग करने के बारे में निर्देश देखें, तो README को अपनाएं.

Guava प्रोजेक्ट का उदाहरण: एक्सटर्नल डिपेंडेंसी

आपके पास Guava की बाहरी डिपेंडेंसी को सूची में जोड़ने का विकल्प है प्रोजेक्ट बना सकते हैं rules_jvm_external नियमसेट.

MODULE.bazel फ़ाइल में यह स्निपेट जोड़ें:

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. एक BUILD फ़ाइल बनाएं

अब आपको अपने फ़ाइल फ़ोल्डर और बाहरी डिपेंडेंसी के बारे में जानकारी मिलेगी (अगर लागू है), तो आपको यह बताने के लिए BUILD फ़ाइलें बनानी होंगी कि बनाया जाना चाहिए. अपनी एक pom.xml फ़ाइल के साथ Maven के उलट, Basel का इस्तेमाल किया जा सकता है ज़्यादा BUILD फ़ाइलों का इस्तेमाल किया जा सकता है. इन फ़ाइलों में एक से ज़्यादा बिल्ड का पता चलता है की मदद से, बेज़ल को ज़्यादा बिल्ड तैयार करने में मदद मिलती है.

BUILD फ़ाइलों को अलग-अलग चरणों में जोड़ें. सबसे पहले, रूट पर एक BUILD फ़ाइल जोड़ें लॉन्च करने के लिए किया जा सकता है. इसके बाद, आपको ज़्यादा बेहतर टारगेट वाली BUILD फ़ाइलें जोड़कर, अपना बिल्ड बेहतर बनाएं.

  1. जिस डायरेक्ट्री में आपकी MODULE.bazel फ़ाइल है उसी में एक टेक्स्ट फ़ाइल बनाएं और इसे 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: आपको यह पता लगाना होगा कि आपकी कौनसी बाहरी डिपेंडेंसी इस काम में आपकी मदद कर सकता है.
      • इस टॉप-लेवल बिल्ड के नीचे दिया गया उदाहरण देखें फ़ाइल बनाई हुई है.

  3. अब जब आपके पास आपके प्रोजेक्ट के रूट में एक BUILD फ़ाइल है, तो अपना ताकि यह पक्का किया जा सके कि यह काम करे. कमांड लाइन पर, फ़ाइल फ़ोल्डर से डायरेक्ट्री में, Baze के साथ प्रोजेक्ट बनाने के लिए bazel build //:everything का इस्तेमाल करें.

    यह प्रोजेक्ट अब Baze के साथ मिलकर बना है. आपको यह जानकारी जोड़नी होगी और BUILD फ़ाइलों का इस्तेमाल करें, ताकि प्रोजेक्ट में बढ़ोतरी के साथ उसे बनाया जा सके.

Guava प्रोजेक्ट का उदाहरण: एक BUILD फ़ाइल से शुरू करना

Guava प्रोजेक्ट को Baze प्रोजेक्ट में माइग्रेट करते समय, शुरुआत में एक BUILD फ़ाइल का इस्तेमाल इन कामों के लिए किया जाता है उस पूरे प्रोजेक्ट को बनाने के लिए होता है. इस शुरुआती BUILD फ़ाइल का कॉन्टेंट यहां दिया गया है फ़ाइल फ़ोल्डर डायरेक्ट्री:

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. और BUILD फ़ाइलें बनाएं (वैकल्पिक)

Basel ने सिर्फ़ एक BUILD file के साथ काम किया, जैसा कि आपने पहला बिल्ड. इसलिए, बिल्ड को छोटे-छोटे हिस्सों में बांटकर ज़्यादा जानकारी वाले टारगेट वाली BUILD और फ़ाइलें जोड़ी जा रही हैं.

कई टारगेट वाली कई BUILD फ़ाइलों के बिल्ड बढ़ाने में मदद मिलेगी कंट्रोल के चुने गए लेवल की मदद से, ये काम किए जा सकते हैं:

  • प्रोजेक्ट के निर्माण में बढ़ोतरी,
  • बिल्ड को साथ-साथ एक-एक करके एक्ज़ीक्यूट करने की कोशिश की.
  • आने वाले समय के उपयोगकर्ताओं के लिए बिल्ड का बेहतर रखरखाव, और
  • पैकेज के बीच टारगेट की विज़िबिलिटी पर कंट्रोल रखा जाता है. इसका मतलब है कि समस्याएं, जैसे कि लाइब्रेरी में लागू करने की जानकारी लीक हो रही है सार्वजनिक एपीआई.

ज़्यादा BUILD फ़ाइलें जोड़ने के लिए सलाह:

  • आप हर Java पैकेज में BUILD फ़ाइल जोड़कर शुरू कर सकते हैं. Java का इस्तेमाल शुरू करें ऐसे पैकेज जिनमें सबसे कम निर्भर होते हैं और जो आपके पैकेज के हिसाब से काम करते हैं सबसे ज़्यादा निर्भर करता है.
  • BUILD फ़ाइलें जोड़ने और टारगेट तय करने पर, इन नए टारगेट को टारगेट के deps सेक्शन, जो इन पर निर्भर हैं. ध्यान दें कि glob() फ़ंक्शन, पैकेज की सीमाओं को पार नहीं करता है, इसलिए पैकेज की संख्या इस विकल्प से, glob() से मेल खाने वाली फ़ाइलें कम हो जाती हैं.
  • जब भी BUILD फ़ाइल को main डायरेक्ट्री में जोड़ा जाए, तो पक्का करें कि आपने BUILD फ़ाइल को संबंधित test डायरेक्ट्री में सेव करना होगा.
  • इस बात का ध्यान रखें कि अलग-अलग पैकेज के बीच में वे सिर्फ़ कुछ लोगों को ही दिखें.
  • अपनी BUILD फ़ाइलों के सेटअप में, समस्या हल करने से जुड़ी गड़बड़ियों को आसान बनाने के लिए, पक्का करें कि को जोड़ा जा सकता है और हर बिल्ड फ़ाइल को जोड़ने पर, प्रोजेक्ट Basel के साथ बनाने की प्रोसेस जारी रहती है. bazel build //... चलाकर पक्का करें कि आपके सभी टारगेट अब भी तैयार हैं.

4. Basel का इस्तेमाल करके बनाएं

आपने Baज़ल का इस्तेमाल करके, सेटअप की पुष्टि करने के लिए BUILD फ़ाइलें जोड़ी हैं बिल्ड का हिस्सा हैं.

जब आपके पास विवरण के स्तर के हिसाब से BUILD फ़ाइलें हों, तो बेज़ल का इस्तेमाल इन कामों के लिए किया जा सकता है अपने सभी बिल्ड का इस्तेमाल करें.