Scala for Backend Engineering & Functional Programming · درس

بناء المشاريع المتعددة ونشرها

اضبط عمليات بناء SBT متعددة المشاريع وأدرها للتطبيقات الكبيرة، واستعد للنشر

الدرس 3 من 311 خطوة

بناء المشاريع المتعددة ونشرها درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 3 دروس في المجموع.

لماذا نستخدم مشاريع متعددة؟

مع نمو تطبيقات Scala، قد تصبح إدارة جميع التعليمات البرمجية ضمن مشروع واحد أمرًا صعبًا. تساعد عمليات البناء متعددة المشاريع على تنظيم قاعدة التعليمات البرمجية.

فهي تتيح لكم ما يلي:

  • فصل الوحدات المختلفة (مثل المنطق الأساسي وواجهة API والأدوات المساعدة).
  • إدارة التبعيات بين هذه الوحدات بوضوح.
  • تطبيق إعدادات محددة على الأجزاء الفردية من التطبيق.

يُحسّن هذا النهج modularity وقابلية الصيانة.

تعريف مشاريع متعددة

في SBT، تعرّفون مشاريع متعددة داخل ملف build.sbt الرئيسي. ويكون كل مشروع عادةً عبارة عن lazy val.

يجمع المشروع الجذر عادةً هذه المشاريع الفرعية أو يعتمد عليها.

فيما يلي إعداد أساسي لمشروع جذر ومشروعين فرعيين:

lazy val root = project
  .in(file("."))
  .aggregate(core, api)

lazy val core = project
  .in(file("core"))

lazy val api = project
  .in(file("api"))

بنية أدلة المشروع الفرعي

في عملية بناء متعددة المشاريع، يوجد كل مشروع فرعي عادةً في دليله الخاص على المستوى الجذري لمشروعكم.

تبدو البنية القياسية كما يلي:

  • my-app/ (دليل المشروع الجذر)
    • build.sbt (ملف البناء الرئيسي)
    • project/ (ملفات تعريف بناء SBT)
    • core/ (دليل المشروع الفرعي 'core')
      • src/ (التعليمات البرمجية المصدرية لـ 'core')
    • api/ (دليل المشروع الفرعي 'api')
      • src/ (التعليمات البرمجية المصدرية لـ 'api')

مثال على تعليمات برمجية لمشروع فرعي

يمكن أن يحتوي كل مشروع فرعي على ملفات مصدر Scala الخاصة به. فعلى سبيل المثال، قد يحتوي مشروع core لدينا على أداة مساعدة بسيطة.

حاولوا تشغيل هذا المثال من داخل مشروع core:

package com.coddykit.core

object Greeter {
  def greet(name: String): String = s"Hello, $name!"
}

object CoreApp {
  def main(args: Array[String]): Unit = {
    println(Greeter.greet("CoddyKit"))
  }
}

التبعيات بين المشاريع

غالبًا ما يحتاج أحد المشاريع الفرعية إلى استخدام تعليمات برمجية من مشروع فرعي آخر. فعلى سبيل المثال، قد يحتاج مشروع api إلى Greeter من مشروع core.

تُصرَّح عن هذه التبعيات باستخدام .dependsOn() في ملف build.sbt.

lazy val root = project
  .in(file("."))
  .aggregate(core, api)

lazy val core = project
  .in(file("core"))

lazy val api = project
  .in(file("api"))
  .dependsOn(core)

مشاركة الإعدادات الشائعة

قد تكون العديد من الإعدادات (مثل إصدار Scala أو التبعيات الشائعة) متطابقة في جميع مشاريعكم الفرعية.

لتجنب التكرار، يمكنكم تعريف كتلة commonSettings وتطبيقها على كل مشروع.

lazy val commonSettings = Seq(
  scalaVersion := "2.13.8",
  organization := "com.coddykit"
)

lazy val root = project
  .in(file("."))
  .aggregate(core, api)
  .settings(commonSettings)

lazy val core = project
  .in(file("core"))
  .settings(commonSettings)

lazy val api = project
  .in(file("api"))
  .dependsOn(core)
  .settings(commonSettings)

تجميع المهام

عندما يكون لديكم مشروع جذر يجمع المشاريع الفرعية، فإن تشغيل مهمة مثل compile على المشروع الجذر سيؤدي تلقائيًا إلى تشغيلها على جميع المشاريع الفرعية المجمّعة.

فعلى سبيل المثال، سيؤدي إدخال sbt compile في الدليل الجذر إلى تجميع كل من core وapi.

تُعد الطريقة .aggregate() أساسية لهذا السلوك.

الحزم للنشر

بعد بناء تطبيقكم، تحتاجون إلى حزمه للنشر. ويعني ذلك عادةً إنشاء ملف JAR قابل للتنفيذ (Java Archive).

في عمليات البناء متعددة المشاريع، غالبًا ما تريدون ملف JAR واحدًا يتضمن جميع تعليمات مشروعكم البرمجية وتبعياته. ويُسمى هذا الملف «fat JAR» أو «uber JAR».

لا ينشئ SBT ملفات fat JAR افتراضيًا، لكن يمكن أن تساعدكم الإضافات في ذلك.

إضافة SBT Assembly لملفات fat JAR

تُستخدم إضافة sbt-assembly على نطاق واسع لإنشاء ملفات fat JAR. فهي تجمع جميع الأصناف المترجمة والتبعيات في ملف JAR واحد قابل للتنفيذ.

أضيفوا الإضافة أولًا إلى project/plugins.sbt:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.0.0")

حزم المشاريع المتعددة

أي العبارات التالية حول حزم تطبيق Scala متعدد المشاريع للنشر صحيحة؟

مراجعة وخطوات تالية

لقد تعلمتم كيفية تنظيم عمليات البناء متعددة المشاريع وإدارتها في SBT!

  • تعرّفنا على تحديد المشاريع الفرعية في build.sbt.
  • رأيتم كيفية تنظيم الأدلة وإدارة التبعيات بين المشاريع باستخدام .dependsOn().
  • ناقشنا مشاركة الإعدادات الشائعة وتجميع المهام.
  • وأخيرًا، استكشفنا الحزم للنشر، وتحديدًا استخدام إضافة sbt-assembly لإنشاء ملفات fat JAR.

يُعد إتقان عمليات البناء متعددة المشاريع أمرًا بالغ الأهمية لتطبيقات Scala الأكبر والأكثر تعقيدًا، إذ يضمن modularity وسير عمل تطوير فعالًا.

البدء مجانًا

تعلم Scala مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
39
الدروس
143

الأسئلة الشائعة

هل درس «بناء المشاريع المتعددة ونشرها» مجاني؟

نعم — نص درس «بناء المشاريع المتعددة ونشرها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Scala for Backend Engineering & Functional Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Scala for Backend Engineering & Functional Programming 3 دروس في المجموع.

ماذا ستتعلم في «بناء المشاريع المتعددة ونشرها»؟

اضبط عمليات بناء SBT متعددة المشاريع وأدرها للتطبيقات الكبيرة، واستعد للنشر تتمرن على Scala for Backend Engineering & Functional Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Scala for Backend Engineering & Functional Programming؟

لا تُشترط خبرة سابقة. Scala for Backend Engineering & Functional Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.

كم من الوقت يستغرق درس «بناء المشاريع المتعددة ونشرها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟

نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد مشاريع SBT وأساسياتها
  2. إدارة التبعيات والإضافات
  3. بناء المشاريع المتعددة ونشرها
← العودة إلى Scala for Backend Engineering & Functional Programming