الفصل 1: Spring Initializr
مقدمة
Spring Initializr هو مولد مشاريع ويب يتيح لك إنشاء مشروع Spring Boot بسرعة مع التبعيات والتكوين الأساسي اللازم. إنه نقطة الانطلاق الموصى بها لأي مشروع Spring Boot جديد.
أهداف الفصل
في نهاية هذا الفصل، ستكون قادرًا على:
- استخدام Spring Initializr لإنشاء مشاريع Spring Boot
- فهم الخيارات المختلفة للتكوين
- اختيار التبعيات المناسبة لمشروعك
- توليد واستيراد مشروع في بيئة التطوير المتكاملة الخاصة بك
ما هو Spring Initializr؟
التعريف
Spring Initializr هو أداة تمهيد تولد الهيكل الأساسي لمشروع Spring Boot. يقوم بـ:
- إنشاء هيكل الدلائل لـ Maven أو Gradle
- توليد ملف
pom.xmlأوbuild.gradleمع التبعيات - إضافة الفئة الرئيسية مع
@SpringBootApplication - تكوين ملفات الموارد الأساسية
الوصول إلى Spring Initializr
هناك عدة طرق للوصول إلى Spring Initializr:
- واجهة الويب: https://start.spring.io/
- تكامل IDE: IntelliJ IDEA، VS Code مع ملحقات Spring
- Spring CLI: سطر الأوامر
- API REST: لأتمتة العمليات
واجهة الويب لـ Spring Initializr
عنوان URL للوصول
https://start.spring.io/
الأقسام الرئيسية
الواجهة مقسمة إلى عدة أقسام:
تكوين المشروع
1. Project Type (نوع المشروع)
الخيارات المتاحة:
| النوع | الوصف | الاستخدام |
|---|---|---|
| Maven | أداة بناء XML | موصى به للمبتدئين، موثق بشكل واسع |
| Gradle | أداة بناء Groovy/Kotlin DSL | أكثر حداثة، أسرع، صياغة مختصرة |
التوصية: Maven لهذا الدورة (أكثر شيوعًا في صناعة Java)
2. Language (اللغة)
الخيارات المتاحة:
| اللغة | الوصف | المستوى |
|---|---|---|
| Java | اللغة الرئيسية لـ Spring | موصى به |
| Kotlin | لغة حديثة من JetBrains | متقدم |
| Groovy | لغة ديناميكية | أقل شيوعًا |
التوصية: Java (لغة هذا الدورة)
3. Spring Boot Version
صيغة الإصدار: X.Y.Z
- X: إصدار رئيسي (تغييرات كبيرة)
- Y: إصدار فرعي (ميزات جديدة)
- Z: إصدار تصحيح (إصلاحات أخطاء)
مثال:
3.2.0
أنواع الإصدارات:
| النوع | اللاحقة | المعنى | الاستخدام |
|---|---|---|---|
| Release | لا يوجد | إصدار مستقر | للإنتاج |
| Snapshot | -SNAPSHOT | إصدار قيد التطوير | للتطوير فقط |
| Milestone | -M1, -M2 | إصدار تجريبي | للاختبارات |
| Release Candidate | -RC1 | مرشح للإصدار | للاختبارات النهائية |
التوصية: اختر دائمًا أحدث إصدار مستقر (بدون لاحقة)
بيانات المشروع
هيكل البيانات
1. Group
التعريف: معرف المنظمة أو الفريق (اتفاقية Maven)
الصيغة: اسم النطاق المعكوس
أمثلة:
com.example # مثال عام
com.inskillflow # منظمة inskillflow
org.springframework # إطار عمل Spring
الاتفاقية: استخدم نطاقك المعكوس أو com.example للتمارين
2. Artifact
التعريف: معرف فريد للمشروع
الصيغة: حروف صغيرة، شرطات للمسافات
أمثلة:
greeting-app
user-management-service
e-commerce-backend
الاتفاقية: اسم وصفي بصيغة kebab-case
3. Name
التعريف: الاسم المعروض للمشروع
الصيغة: اسم قابل للقراءة البشرية
أمثلة:
Greeting Application
User Management Service
E-Commerce Backend
4. Description
التعريف: وصف قصير للمشروع
مثال:
تطبيق Spring Boot لإدارة التحيات
5. Package Name
التعريف: حزمة Java الجذرية للمشروع
الصيغة: يتم توليدها تلقائيًا: {group}.\{artifact\}
مثال:
com.example.greeting
الهيكل الناتج:
src/main/java/com/example/greeting/
├── GreetingApplication.java
├── controller/
├── service/
└── model/
6. Packaging
الخيارات المتاحة:
| النوع | الوصف | الاستخدام |
|---|---|---|
| JAR | Java Archive (مستقل) | تطبيقات Spring Boot مع خادم مدمج |
| WAR | Web Archive | نشر على خادم خارجي (Tomcat، إلخ) |
التوصية: JAR (Spring Boot يدمج خادمه الخاص)
الفرق:
7. Java Version
الإصدارات المدعومة من Spring Boot 3.x:
| الإصدار | الدعم | التوصية |
|---|---|---|
| Java 17 | LTS | موصى به |
| Java 21 | LTS | حديث جدًا |
| Java 11 | LTS قديم | غير مدعوم من Spring Boot 3.x |
ملاحظة هامة: يتطلب Spring Boot 3.x الحد الأدنى Java 17
إدارة التبعيات
ما هي التبعية؟
التبعية (أو dependency) هي مكتبة خارجية يستخدمها مشروعك.
Starters Spring Boot
يستخدم Spring Boot مفهوم "starters" - تبعيات مجمعة.
صيغة starter:
spring-boot-starter-{technologie}
فئات التبعيات
1. Web
| Starter | الوصف | الاستخدام |
|---|---|---|
| Spring Web | REST APIs، Spring MVC | تطبيقات ويب REST |
| Spring Reactive Web | WebFlux (تفاعلي) | تطبيقات عالية القابلية للتوسع |
2. SQL (قواعد البيانات العلائقية)
| Starter | الوصف |
|---|---|
| Spring Data JPA | ORM مع Hibernate |
| JDBC API | وصول SQL منخفض المستوى |
| MyBatis Framework | ربط SQL/Java |
3. NoSQL
| Starter | الوصف |
|---|---|
| Spring Data MongoDB | قاعدة بيانات مستندات |
| Spring Data Redis | ذاكرة تخزين مؤقت في الذاكرة |
| Spring Data Elasticsearch | بحث نصي كامل |
4. الأمان
| Starter | الوصف |
|---|---|
| Spring Security | المصادقة والتفويض |
| OAuth2 Client | تسجيل الدخول الاجتماعي (Google، Facebook) |
| OAuth2 Resource Server | API محمي |
5. SQL Drivers
| Driver | قاعدة البيانات |
|---|---|
| PostgreSQL Driver | PostgreSQL |
| MySQL Driver | MySQL/MariaDB |
| H2 Database | قاعدة بيانات في الذاكرة (للاختبارات) |
| Oracle Driver | Oracle Database |
6. I/O
| Starter | الوصف |
|---|---|
| Validation | التحقق من البيانات (@Valid) |
| Spring Web Services | خدمات ويب SOAP |
| Spring for Apache Kafka | مراسلة Kafka |
7. أدوات المطورين
| Tool | الوصف | الاستخدام |
|---|---|---|
| Spring Boot DevTools | إعادة تحميل تلقائي | التطوير |
| Lombok | تقليل كود boilerplate | الإنتاجية |
| Spring Configuration Processor | إكمال تلقائي للتكوينات | التطوير |
تبعيات لمشروع REST بسيط
لتطبيق REST أساسي، اختر:
✅ Spring Web
✅ Spring Boot DevTools
تبعيات لتطبيق كامل
لتطبيق مع قاعدة بيانات:
✅ Spring Web
✅ Spring Data JPA
✅ PostgreSQL Driver (أو آخر)
✅ Validation
✅ Spring Boot DevTools
✅ Lombok (اختياري)
التوليد والتنزيل
خيارات التوليد
الأزرار المتاحة:
-
EXPLORE (Ctrl + Space)
- معاينة هيكل المشروع
- رؤية محتوى
pom.xml - التحقق من الملفات المولدة
-
SHARE
- توليد رابط قابل للمشاركة
- مشاركة التكوين مع الفريق
-
GENERATE (Ctrl + Enter)
- تنزيل المشروع كملف ZIP
- جاهز لفك الضغط والاستيراد
هيكل ZIP المولد
greeting-app.zip
└── greeting/
├── .mvn/ # Wrapper Maven
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/greeting/
│ │ │ └── GreetingApplication.java
│ │ └── resources/
│ │ ├── static/ # ملفات ثابتة (CSS، JS، صور)
│ │ ├── templates/ # قوالب (Thymeleaf)
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/example/greeting/
│ └── GreetingApplicationTests.java
├── .gitignore
├── mvnw # Maven wrapper (Unix)
├── mvnw.cmd # Maven wrapper (Windows)
├── pom.xml # تكوين Maven
└── HELP.md
الاستيراد في بيئة التطوير المتكاملة
الخيار 1: Visual Studio Code
الخطوات:
- فك ضغط الملف ZIP
- VS Code → File → Open Folder
- اختر المجلد
greeting - انتظر الاستيراد التلقائي لـ Maven
- الملحقات المطلوبة:
- Extension Pack for Java
- Spring Boot Extension Pack
الخيار 2: IntelliJ IDEA
الخطوات:
- فك ضغط الملف ZIP
- IntelliJ → File → Open
- اختر المجلد
greeting - يكتشف IntelliJ المشروع Maven تلقائيًا
- انتظر الفهرسة
الخيار 3: Eclipse/Spring Tool Suite (STS)
الخطوات:
- فك ضغط الملف ZIP
- Eclipse → File → Import
- Maven → Existing Maven Projects
- اختر المجلد
greeting - Finish
بدائل لواجهة الويب
1. Spring Initializr في VS Code
التثبيت:
- الملحق: Spring Initializr Java Support
الاستخدام:
- Ctrl + Shift + P
- اكتب: "Spring Initializr: Create a Maven Project"
- اتبع التعليمات
2. Spring CLI
التثبيت:
# macOS
brew install spring-boot
# Linux/Windows
# تحميل من: https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-installing-the-cli
الاستخدام:
spring init \
--dependencies=web,data-jpa,postgresql \
--name=greeting \
--group-id=com.example \
--artifact-id=greeting \
greeting-app
3. API REST لـ Spring Initializr
عنوان URL الأساسي:
https://start.spring.io
مثال باستخدام curl:
curl https://start.spring.io/starter.zip \
-d dependencies=web,data-jpa \
-d name=greeting \
-d groupId=com.example \
-d artifactId=greeting \
-o greeting.zip
تمارين عملية
التمرين 1: إنشاء مشروع بسيط
الهدف: إنشاء مشروع REST بسيط
التعليمات:
- اذهب إلى https://start.spring.io/
- قم بتكوين:
- النوع: Maven
- Java: 17
- المجموعة:
com.example - العنصر:
hello-rest
- أضف: Spring Web
- قم بالتوليد والتنزيل
- استورد في VS Code
التمرين 2: إنشاء مشروع مع قاعدة بيانات
الهدف: إنشاء مشروع مع JPA
التعليمات:
- اذهب إلى https://start.spring.io/
- قم بتكوين:
- النوع: Maven
- Java: 17
- المجموعة:
com.example - العنصر:
user-manager
- أضف:
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Validation
- قم بالتوليد واستكشف
pom.xml
التمرين 3: تحليل pom.xml
الهدف: فهم التبعيات المولدة
التعليمات:
- قم بتوليد مشروع مع Spring Web
- افتح
pom.xml - حدد:
- الوالد Spring Boot
- starter الويب
- المكون الإضافي Maven Spring Boot
- قم بإدراج جميع التبعيات الانتقالية
أسئلة مراجعة
-
ما هو Spring Initializr؟
-
ما الفرق بين Maven وGradle؟
-
ماذا يعني "starter" في Spring Boot؟
-
ما هي الاتفاقية لـ Group ID؟
-
لماذا تختار JAR بدلاً من WAR لـ Spring Boot؟
-
ما هو الحد الأدنى لإصدار Java لـ Spring Boot 3.x؟
-
ما هو الغرض من Spring Boot DevTools؟
-
ما هي التبعية اللازمة لإنشاء REST APIs؟
ملخص الفصل
النقاط الرئيسية
- Spring Initializr يولد بسرعة مشاريع Spring Boot
- متاح عبر الويب، IDE، CLI أو API
- التكوين في 3 أقسام: المشروع، البيانات، التبعيات
- "starters" تجمع التبعيات المتناسقة
- JAR هو التغليف الموصى به لـ Spring Boot
- Java 17+ مطلوب لـ Spring Boot 3.x
أفضل الممارسات
- استخدام إصدارات مستقرة من Spring Boot
- اختيار التبعيات الضرورية فقط
- اتباع اتفاقيات التسمية لـ Maven
- استخدام DevTools في التطوير
- إصدار الكود منذ الإنشاء
الخطوات التالية
في الفصل التالي، سنستكشف بالتفصيل:
الفصل 2: هيكل مشروع Spring Boot
- تنظيم الحزم
- دور كل ملف
- اتفاقيات التسمية
- الهندسة المعمارية الطبقية