توضّح هذه الصفحة كيفية نقل البيانات من Maven إلى Bazel، بما في ذلك المتطلبات الأساسية وخطوات التثبيت. ويوضّح هذا الاختلاف الاختلافات بين Maven وBazel، ويقدّم مثالاً لنقل البيانات باستخدام مشروع Guava.
عند نقل البيانات من أي أداة إصدار إلى Bazel، من الأفضل أن يتم تشغيل أدوات الإنشاء في الوقت نفسه إلى أن يتم نقل بيانات فريق التطوير ونظام CI وأي أنظمة أخرى ذات صلة. يمكنك تشغيل Maven وBazel في المستودع نفسه.
قبل البدء
- ثبِّت تطبيق Bazel إذا لم يكن مثبَّتًا بعد.
- إذا كنت مبتدئًا في استخدام Bazel، يمكنك الاطّلاع على البرنامج التعليمي مقدّمة عن Bazel: Build Java قبل بدء عملية نقل البيانات. يشرح البرنامج التعليمي مفاهيم Bazel وبنيتها وبنيتها وتصنيفها.
أوجه الاختلاف بين Maven وBazel
- يستخدم Maven ملفات
pom.xml
ذات المستوى الأعلى. يتوافق Bazel مع ملفات الإصدار المتعددة والاستهدافات المتعددة لكل ملفBUILD
، ما يسمح بالإصدارات التي تزيد سرعتها عن Maven'. - يتولى Maven مسؤولية تنفيذ خطوات عملية النشر. لا يعمل Bazel على النشر تلقائيًا.
- يمكنك استخدام Bazel للتعبير عن تبعيتك بين اللغات.
- أثناء إضافة أقسام جديدة إلى المشروع، قد تحتاج على Bazel إلى إضافة ملفات
BUILD
جديدة. وتتمثل أفضل ممارسة في إضافة ملفBUILD
إلى كل حزمة Java جديدة.
نقل البيانات من Maven إلى Bazel
توضّح الخطوات أدناه كيفية نقل بيانات مشروعك إلى Bazel:
تأتي الأمثلة أدناه من عملية نقل
مشروع Gavaava من Maven إلى Bazel.
تمّ إطلاق مشروع Guava المُستخدَم في v31.1
. لا تميّز الأمثلة التي تستخدِم GAva
في كل خطوة في عملية نقل البيانات، ولكنها تعرض الملفات و
المحتوى الذي يتم إنشاؤه أو إضافته يدويًا لعملية نقل البيانات.
$ git clone https://github.com/google/guava.git && cd guava
$ git checkout v31.1
1- إنشاء ملف WORKSPACE
أنشِئ ملفًا باسم WORKSPACE
في جذر مشروعك. إذا لم يكن مشروعك
يتضمن تبعيات خارجية، يمكن أن يكون ملف مساحة العمل فارغًا.
إذا كان مشروعك يعتمد على ملفات أو حِزم ليست في أحد أدلة المشروع، اختَر هذه التبعيات الخارجية في ملف workspace. لبرمجة بيانات المهام التابعة الخارجية لملف مساحة العمل،
استخدِم rules_jvm_external
. للحصول على تعليمات عن استخدام هذه القاعدة، يمكنك الاطّلاع على
قراءة.
مثال على مشروع GAva: المهام التابعة الخارجية
يمكنك إدراج العناصر التابعة الخارجية
لمشروع Gavaava باستخدام
قاعدة البيانات 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
لوصف كيفية إنشاء مشروعك. على عكس Maven باستخدام ملف pom.xml
واحد، يستطيع Bazel استخدام العديد من
ملفات BUILD
لإنشاء مشروع. تحدّد هذه الملفات أهداف إصدار متعدّدة، ما يسمح لتطبيق Bazel بإنشاء إصدارات متزايدة.
يجب إضافة BUILD
ملف على مراحل. ابدأ بإضافة ملف BUILD
واحدًا
في جذر مشروعك واستخدمه لإجراء بناء مبدئي باستخدام Bazel.
بعد ذلك، يتم تحسين الإصدار من خلال إضافة المزيد من ملفات 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
: استخدِم globb لإدراج جميع ملفات java .في مشروعك.resources
: استخدِم الكرة الأرضية لإدراج جميع الموارد في مشروعك.deps
: عليك تحديد المهام التابعة الخارجية التي يحتاج إليها مشروعك. على سبيل المثال، إذا أنشأت قائمة بالارتباطات الخارجية باستخدام الأداةgenerate_workspace
، تكون ارتباطات تبعيةjava_library
هي المكتبات المُدرَجة في وحدة الماكروgenerated_java_libraries
.
اطّلِع على مثال أدناه حول ملف BUILD ذي المستوى الأعلى من نقل بيانات مشروع Guava.
الآن بعد أن أصبح لديك ملف
BUILD
في جذر مشروعك، يمكنك إنشاء مشروع لضمان عمله. في سطر الأوامر، من دليل مساحة العمل، استخدِمbazel build //:everything
لإنشاء مشروعك باستخدام Bazel.تم بناء المشروع بنجاح باستخدام Bazel. عليك إضافة المزيد من ملفات
BUILD
للسماح للإصدارات المتزايدة للمشروع.
مثال على مشروع "جوفا": ابدأ بملف BUILD واحد
عند نقل بيانات مشروع Zava إلى Bazel، يتم في البداية استخدام ملف واحد (BUILD
) لإنشاء المشروع بأكمله. في ما يلي محتوى ملف BUILD
الأولي هذا في دليل Workspace:
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 (اختياري)
يعمل تطبيق Bazel مع جهاز BUILD file
واحد فقط كما رأيت بعد إكمال الإصدار الأول له. عليك أيضًا تقسيم الإصدار إلى أجزاء أصغر من خلال إضافة المزيد من ملفات BUILD
باستخدام استهدافات دقيقة.
إنّ ملفات BUILD
المتعددة التي تتضمّن أهدافًا متعددة ستمنح الإصدار مزيدًا من الدقة، ما يسمح بما يلي:
- زيادة عمليات البناء للمشروع،
- عملية التنفيذ المتوازية للمبنى،
- صيانة الإصدار بشكل أفضل للمستخدمين في المستقبل
- التحكم في ظهور الأهداف بين الحِزم، ما قد يمنع حدوث مشاكل، مثل المكتبات التي تحتوي على تفاصيل التنفيذ التي يتم تسريبها على واجهات برمجة التطبيقات العامة.
نصائح لإضافة المزيد من ملفات BUILD
:
- يمكنك البدء بإضافة ملف
BUILD
إلى كل حزمة Java. ابدأ باستخدام حِزم Java التي تتضمّن أقل اعتماديات وتعمل على إعداد الحزم التي لها أكبر اعتماديات. - وعند إضافة ملفات
BUILD
وتحديد الأهداف، أضِف هذه الاستهدافات الجديدة إلى قسمَين (deps
) من الأهداف التي تعتمد عليها. يُرجى العِلم أنّ الدالةglob()
لا تتخطّى حدود الحزمة، لأنّ عدد الحِزم يزيد حجم الملفات المطابقة معglob()
. - عند إضافة ملف
BUILD
إلى دليلmain
، يُرجى التأكّد من إضافة ملفBUILD
إلى دليلtest
المقابل. - احرص على الحدّ من ظهور المحتوى بشكل صحيح بين الحِزم.
- لتبسيط أخطاء تحديد المشاكل وحلّها في إعداد ملفات
BUILD
، تأكَّد من أنّ المشروع يواصل العمل باستخدام Bazel أثناء إضافة كل ملف إصدار. شغِّلbazel build //...
لضمان استمرار إنشاء جميع أهدافك.
4. تصميم باستخدام Bazel
لقد أنشأت تطبيقك باستخدام Bazel أثناء إضافة ملفات BUILD
للتحقّق من إعداد الإصدار.
عندما يكون لديك BUILD
ملفًا بالدقة المطلوبة، يمكنك استخدام Bazel لإنشاء جميع إصداراتك.