English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مستطرة Maven (SNAPSHOT)

تتكون تطبيقات البرمجيات الكبيرة عادةً من عدة وحدات، وغالبًا ما تكون هناك عدة فرق تطوير تطبيق واحد مختلف. لنأخذ مثالًا، لنفترض أن فريقًا واحدًا يطور واجهة المستخدم الأمامية للتطبيق، ويكون المشروع هو app-ui (app-ui.jar:1.0)، بينما يطور فريق آخر الخلفية للتطبيق ويستخدم مشروعًا هو data-service (data-service.jar:1.0).

من المحتمل أن يكون فريق تطوير data-service يعمل بوتيرة عالية في إصلاح الأخطاء أو تحسين المشروع، ويقومون بنشر المكتبات إلى المخزن بشكل تقريبي كل يومين. اليوم، إذا كان فريق data-service ينشر إصدارًا جديدًا كل يومين، فإن هناك مشكلة قد تظهر:

  • عندما ينشر فريق data-service الكود المحدث، يجب إبلاغ فريق app-ui.

  • يجب على فريق app-ui تحديث ملف pom.xml الخاص به إلى الإصدار الأحدث بانتظام.

لحل هذه المشكلة،السحابةالتي أتت في المكان المناسب.

ما هو السحابة?

السحابة هي إصدار خاص، يتم فيه تحديد نسخة معينة من تقدم التطوير الحالي. على عكس الإصدارات العادية، يتحقق Maven من السحابة الجديدة في المخزن كل مرة يتم بناءها. اليوم، سينشر فريق data-service كل مرة تحديث السحابة إلى المخزن، مثل data-service:1.0-SNAPSHOT بدلاً من السحابة القديمة jar.

مقارنة بين السحابة والإصدار

بالنسبة للإصدار، إذا قام Maven بتحميل ملف الإصدار المحدد مسبقًا، مثل data-service:1.0، فإن Maven لن يتحميل ملف الإصدار الجديد المتاح 1.0. لتحميل الكود المحدث، يجب رفع إصدار data-service إلى 1.1.

في حالة السحابة، كل مرة يقوم فريق app-ui ببناء مشروعهم، يتم الحصول تلقائيًا على أحدث السحابة (data-service:1.0-SNAPSHOT) من Maven.

ملف pom.xml لمشروع app-ui

مشروع app-ui يستخدم إصدار 1.0 من مشروع data-service.

<project xmlns="http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>app-ui</groupId>
   <artifactId>app-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
      <dependency>
      <groupId>data-service</groupId>
         <artifactId>data-service</artifactId>
         <version>1.0-SNAPSHOT</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

ملف pom.xml لمشروع data-service

يصدر مشروع data-service نسخة 1.0-SNAPSHOT لكل تغيير صغير.

<project xmlns="http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>data-service</groupId>
   <artifactId>data-service</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
</project>

بالرغم من ذلك، في حالة السnapshots، Maven سيحصل تلقائيًا على أحدث السnapshots في العمل اليومي، يمكنك أيضًا إجبار Maven على بناء أحدث السnapshots الآن باستخدام معامل -U في أي أمر Maven.

mvn clean package -U

دعونا نفتح محطة الأوامر، نذهب إلى مجلد C:\ > MVN > app-ui، ثم ننفيذ الأمر mvn المحدد أدناه.

C:\MVN\app-ui>mvn clean package -U

Maven سوف يبدأ في بناء المشروع بعد تنزيل أحدث نسخة من data-service.

[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO]    task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] Downloading data-service:1.0-SNAPSHOT
[INFO] 290K downloaded.
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\app-ui\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\
resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\
resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] دليل تقرير Surefire: C:\MVN\app-ui\target\
surefire-reports
-------------------------------------------------------
 اختبارات
-------------------------------------------------------
تشغيل com.companyname.bank.AppTest
اختبارات تشغيل: 1، فشلات: 0، أخطاء: 0، تمريرات: 0، وقت مرور: 0.027 ثانية
نتائج:
اختبارات تشغيل: 1، فشلات: 0، أخطاء: 0، تمريرات: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] بناء jar: C:\MVN\app-ui\target\
app-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] الوقت الإجمالي: 2 ثانية
[INFO] انتهاء في: Tue Jul 10 16:52:18 IST 2012
[INFO] الذاكرة النهائية: 16M/89M
[INFO] ------------------------------------------------------------------------