इस पेज में बताया गया है कि Maven से Basel में माइग्रेट कैसे किया जा सकता है. इसमें आवश्यकताएं और इंस्टॉलेशन के चरण. यह डेटा के अंतर के बारे में बताता है साथ ही, इसमें माइग्रेशन का एक उदाहरण दिया गया है. Guava प्रोजेक्ट.
किसी भी बिल्ड टूल से Basel पर माइग्रेट करते समय, दोनों बिल्ड होना सबसे अच्छा है साथ ही साथ चलने वाले टूल, जब तक कि आप अपनी डेवलपमेंट टीम को पूरी तरह से माइग्रेट न कर लें, सीआई सिस्टम या किसी दूसरे सिस्टम का इस्तेमाल कर सकते हैं. Maven और Baज़र, दोनों को यहां चलाया जा सकता है डेटा स्टोर करने की जगह.
शुरू करने से पहले
- अगर Basel को इंस्टॉल नहीं किया गया है, तो Basel को इंस्टॉल करें.
- अगर आपने Baज़ल का इस्तेमाल पहले नहीं किया है, तो ट्यूटोरियल देखें शुरू करने से पहले Babel के बारे में जानकारी: Java बनाएं माइग्रेट हो रहा है. ट्यूटोरियल में बेज़ल के कॉन्सेप्ट, स्ट्रक्चर, और लेबल के बारे में बताया गया है सिंटैक्स.
Maven और Baज़ल के बीच अंतर
- Maven, टॉप लेवल की
pom.xml
फ़ाइल(फ़ाइलों) का इस्तेमाल करता है. बेज़ल एक से ज़्यादा बिल्ड के साथ काम करता है फ़ाइलें और हरBUILD
फ़ाइल में एक से ज़्यादा टारगेट की मदद से, ऐसा बिल्ड बनाया जा सकता है Maven की तुलना में ज़्यादा बढ़ते हैं. - डिप्लॉयमेंट की प्रोसेस के चरणों को Maven देखता है. बेज़ल यह करते हैं उसे ऑटोमेट न करें.
- Basel की मदद से, आपको अलग-अलग भाषाओं में अपनी डिपेंडेंसी दिखाने की सुविधा मिलती है.
- प्रोजेक्ट में नए सेक्शन जोड़ने पर, Basel की मदद से आपको नए सेक्शन जोड़ने पड़ सकते हैं
BUILD
फ़ाइलें. हर नए Java पैकेज मेंBUILD
फ़ाइल जोड़ना सबसे सही तरीका है.
Maven से बेज़ल में माइग्रेट करें
अपने प्रोजेक्ट को Basel में माइग्रेट करने का तरीका नीचे बताया गया है:
- Workspace फ़ाइल बनाएं
- एक बिल्ड फ़ाइल बनाना
- ज़्यादा BUILD फ़ाइलें बनाना
- Basel का इस्तेमाल करके ऐप्लिकेशन बनाएं
नीचे दिए गए उदाहरण,
Maven से Baze तक का Guava प्रोजेक्ट.
Guava प्रोजेक्ट में, v31.1
को रिलीज़ किया गया है. Guava के इस्तेमाल से जुड़े उदाहरण
लेकिन वे फ़ाइलें और कॉन्टेंट दिखाते हैं, जो
माइग्रेशन के लिए मैन्युअल तरीके से जनरेट या जोड़े गए.
$ git clone https://github.com/google/guava.git && cd guava
$ git checkout v31.1
1. Workspace फ़ाइल बनाएं
अपने प्रोजेक्ट के रूट में WORKSPACE
नाम की फ़ाइल बनाएं. अगर आपका प्रोजेक्ट
कोई बाहरी डिपेंडेंसी नहीं है, इसलिए फ़ाइल फ़ोल्डर वाली फ़ाइल खाली हो सकती है.
अगर आपका प्रोजेक्ट ऐसी फ़ाइलों या पैकेज पर निर्भर है जो
प्रोजेक्ट की डायरेक्ट्री का इस्तेमाल करते हैं, तो फ़ाइल फ़ोल्डर में इन बाहरी डिपेंडेंसी के बारे में बताएं
फ़ाइल से लिए जाते हैं. वर्कस्पेस की फ़ाइल के लिए, बाहरी डिपेंडेंसी की लिस्टिंग को ऑटोमेट करने के लिए,
rules_jvm_external
का इस्तेमाल करें. इस नियमसेट का उपयोग करने के बारे में निर्देशों के लिए, देखें
README.
Guava प्रोजेक्ट का उदाहरण: एक्सटर्नल डिपेंडेंसी
डिपेंडेंसी के तौर पर,
Guava प्रोजेक्ट में
rules_jvm_external
नियमसेट.
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 फ़ाइल बनाएं
अब आपके पास अपना फ़ाइल फ़ोल्डर और बाहरी डिपेंडेंसी है, तो (अगर
लागू) सूची बनाई गई है, तो आपको यह बताने के लिए BUILD
फ़ाइलें बनानी होंगी कि आपका प्रोजेक्ट
बनाया जाना चाहिए. अपनी एक pom.xml
फ़ाइल के साथ Maven के उलट, Basel कई फ़ाइलों का इस्तेमाल कर सकता है
प्रोजेक्ट बनाने के लिए BUILD
फ़ाइलें. ये फ़ाइलें एक से ज़्यादा बिल्ड टारगेट के बारे में बताती हैं,
इसकी मदद से, Basel ने इंक्रीमेंटल बिल्ड तैयार किया.
BUILD
फ़ाइलों को अलग-अलग चरणों में जोड़ें. एक BUILD
फ़ाइल जोड़कर शुरुआत करें
और इसका इस्तेमाल करके, Basel का इस्तेमाल करके शुरुआती बिल्ड तैयार करना होगा.
इसके बाद, ज़्यादा जानकारी वाली ज़्यादा BUILD
फ़ाइलों को जोड़कर, बिल्ड को बेहतर बनाया जाता है
टारगेट के लिए.
जिस डायरेक्ट्री में आपकी
WORKSPACE
फ़ाइल है उसी में एक टेक्स्ट फ़ाइल बनाएं और इसेBUILD
नाम दें.इस
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
मैक्रो.
इन बातों पर ध्यान दें: इस टॉप-लेवल BUILD फ़ाइल के नीचे दिया गया उदाहरण जैसे-जैसे हमें पूरी समस्या का सामना करना पड़ेगा.
अब आपके पास अपने प्रोजेक्ट के रूट में एक
BUILD
फ़ाइल है, इसलिए बनाएं ताकि यह पक्का किया जा सके कि वह काम करे. कमांड लाइन पर, फ़ाइल फ़ोल्डर डायरेक्ट्री,bazel build //:everything
का इस्तेमाल करके प्रोजेक्ट पर काम किया.यह प्रोजेक्ट अब Baze के साथ मिलकर बना है. आपको इनकी ज़रूरत होगी ज़्यादा
BUILD
फ़ाइलें जोड़ने के लिए, ताकि प्रोजेक्ट में बढ़ोतरी की जा सके.
Guava प्रोजेक्ट का उदाहरण: एक BUILD फ़ाइल से शुरू करना
Guava प्रोजेक्ट को Basel में माइग्रेट करते समय, शुरुआत में एक 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. और BUILD फ़ाइलें बनाएं (वैकल्पिक)
Baज़ल, सिर्फ़ एक BUILD file
के साथ काम करता है, जैसा कि आपने पहली बार पूरा करने के बाद देखा था
बिल्ड. इसलिए, बिल्ड को छोटे-छोटे हिस्सों में बांटकर
ज़्यादा जानकारी वाले टारगेट वाली BUILD
और फ़ाइलें जोड़ी जा रही हैं.
कई टारगेट वाली कई BUILD
फ़ाइलों के बिल्ड बढ़ाने में मदद मिलेगी
कंट्रोल के चुने गए लेवल की मदद से, ये काम किए जा सकते हैं:
- प्रोजेक्ट के निर्माण में बढ़ोतरी,
- बिल्ड को साथ-साथ एक-एक करके एक्ज़ीक्यूट करने की कोशिश की.
- आने वाले समय के उपयोगकर्ताओं के लिए बिल्ड का बेहतर रखरखाव, और
- पैकेज के बीच टारगेट की विज़िबिलिटी पर कंट्रोल रखा जाता है. इसका मतलब है कि समस्याएं, जैसे कि लाइब्रेरी में लागू करने की जानकारी लीक हो रही है सार्वजनिक एपीआई.
ज़्यादा BUILD
फ़ाइलें जोड़ने के लिए सलाह:
- आप हर Java पैकेज में
BUILD
फ़ाइल जोड़कर शुरू कर सकते हैं. इसके साथ शुरू करें ऐसे Java पैकेज जिनमें सबसे कम डिपेंडेंसी होती हैं और जो ज़्यादा काम करते हैं सबसे ज़्यादा डिपेंडेंसी वाले पैकेज के लिए. BUILD
फ़ाइलें जोड़ने और टारगेट तय करने पर, इन नए टारगेट को टारगेट केdeps
सेक्शन, जो इन पर निर्भर हैं. ध्यान दें किglob()
फ़ंक्शन, पैकेज की सीमाओं को पार नहीं करता है, इसलिए के पैकेज बढ़ जाते हैं, तोglob()
से मैच होने वाली फ़ाइलें छोटी हो जाती हैं.- जब भी
BUILD
फ़ाइल कोmain
डायरेक्ट्री में जोड़ा जा रहा हो, तो यह पक्का करें कि संबंधितtest
डायरेक्ट्री कीBUILD
फ़ाइल. - इस बात का ध्यान रखें कि अलग-अलग पैकेज के बीच में वे सिर्फ़ कुछ लोगों को ही दिखें.
- अपनी
BUILD
फ़ाइलों के सेटअप में, समस्या हल करने से जुड़ी गड़बड़ियों को आसान बनाने के लिए, पक्का करें कि हर बिल्ड जोड़ने पर, प्रोजेक्ट में Basel के ऐप्लिकेशन का इस्तेमाल जारी रहता है फ़ाइल से लिए जाते हैं.bazel build //...
चलाकर पक्का करें कि आपके सभी टारगेट अब भी तैयार हैं.
4. Basel का इस्तेमाल करके बनाएं
आपने Baज़ल का इस्तेमाल करके, सेटअप की पुष्टि करने के लिए BUILD
फ़ाइलें जोड़ी हैं
बिल्ड का हिस्सा हैं.
जब आपके पास विवरण के स्तर के हिसाब से BUILD
फ़ाइलें हों, तो आपके पास Basel का इस्तेमाल करने का विकल्प होता है
सभी बिल्ड बनाने के लिए इस्तेमाल किया जा सकता है.