مقدمة: التعرف على الإصدار "الحي"
\n\nتخيل أنك تعمل على مشروع Java كبير يتكون من عشر وحدات. وحدة واحدة (مثل core-api) يتم تطويرها باستمرار بواسطة مطور آخر. تريد استخدام أحدث تطوراته، لكن الإصدار الرسمي (1.0.0) لن يصدر إلا بعد شهر. ماذا تفعل؟ هل تنتظر؟ تنسخ الكود؟ تذهب إلى زميلك وتطلب منه تجميع ملف JAR؟
هنا يأتي دور لقطة Maven — إصدار خاص من القطعة الأثرية يحتوي دائمًا على أحدث بناء. في هذه المقالة، سنشرح ما هي اللقطة بكلمات بسيطة، وكيف تختلف عن الإصدار النهائي العادي، ولماذا لا يخلو أي مشروع Java حديث منها.
\n\n1. ما هي لقطة Maven؟ (شرح للمبتدئين)
\n\nفي عالم Maven، كل قطعة أثرية (مكتبة، وحدة) لها ثلاثة إحداثيات: groupId و artifactId و version. يمكن أن يكون الإصدار من نوعين:
- \n
- الإصدار النهائي (Release) — إصدار ثابت ومستقر (مثل
1.0.0،2.3.1). لا يتغير أبدًا. \n - اللقطة (Snapshot) — إصدار "حي" وقابل للتغيير (مثل
1.0.0-SNAPSHOT،2.0.0-SNAPSHOT). إنها مسودة يمكن تحديثها في كل مرة يتم فيها البناء. \n
الفكرة الرئيسية: اللقطة تشير دائمًا إلى أحدث إصدار من الكود في فرع التطوير. إذا أضفت تبعية على 1.0.0-SNAPSHOT، فسيتحقق Maven في كل بناء مما إذا كان هناك إصدار جديد من هذه اللقطة، وسيقوم بتنزيله.
2. لماذا نحتاج اللقطة؟ سيناريوهات الاستخدام الرئيسية
\n\nتحل اللقطة ثلاث مشاكل رئيسية في التطوير الجماعي:
\n\n2.1. التكامل المستمر (CI/CD)
\nتخيل أن خادم CI الخاص بك (Jenkins، GitLab CI) يقوم ببناء المشروع كل 5 دقائق. إذا كنت تستخدم إصدارات عادية، فسيتعين عليك تغيير رقم الإصدار يدويًا كل دقيقة. مع اللقطة، لا حاجة لذلك — الإصدار 1.0.0-SNAPSHOT سيكون دائمًا الأحدث.
2.2. التبعيات بين الوحدات داخل نفس المشروع
\nفي المشاريع متعددة الوحدات (مثل backend، frontend-api، common)، غالبًا ما تشير الوحدات إلى بعضها البعض. بينما يكون التطوير نشطًا، من المناسب استخدام تبعيات SNAPSHOT — فهي تسحب أحدث التغييرات تلقائيًا.
2.3. اختبار التكاملات قبل الإصدار النهائي
\nلنفترض أن الفريق (أ) يكتب مكتبة auth-lib، والفريق (ب) يستخدمها. ينشر الفريق (أ) auth-lib:2.0.0-SNAPSHOT، ويضيف الفريق (ب) هذه التبعية ويرى على الفور الطرق الجديدة. إذا حدث خطأ ما، يمكن العودة بسرعة إلى الإصدار النهائي المستقر.
3. كيف تبدو اللقطة في ملف pom.xml الحقيقي؟
\n\nيكفي إضافة اللاحقة -SNAPSHOT إلى الإصدار. إليك مثال:
<project>\n <modelVersion>4.0.0</modelVersion>\n <groupId>com.pythonlib</groupId>\n <artifactId>my-utils</artifactId>\n <version>1.0.0-SNAPSHOT</version> <!-- هذه لقطة -->\n <packaging>jar</packaging>\n</project>\n\n\nوإليك كيف تقوم بتوصيل لقطة مشروع آخر في ملف pom.xml الخاص بك:
<dependencies>\n <dependency>\n <groupId>com.otherteam</groupId>\n <artifactId>auth-lib</artifactId>\n <version>2.0.0-SNAPSHOT</version>\n </dependency>\n</dependencies>\n\n\nلاحظ: Maven افتراضيًا لا يخزن اللقطة مؤقتًا إلى الأبد. يتحقق من التحديثات مرة واحدة يوميًا (افتراضيًا). ولكن يمكنك إجباره على تحديث جميع تبعيات اللقطة باستخدام العلم -U:
mvn clean install -U\n\n\n