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

بناء آلي باستخدام Maven

يحدد بناء التلقائي هذا السيناريو: بعد بناء المشروع بنجاح، تبدأ في بناء المشاريع المرتبطة بالاعتماد، مما يضمن استقرار مشاريع الاعتماد.

على سبيل المثال، فريق يعمل على مشروع bus-core-api، ويتمتع بثلاثة مشاريع أخرى هي app-web-ui و app-desktop-ui تعتمد على هذا المشروع.

مشروع app-web-ui يستخدم إصدار السnapshot 1.0 لمشروع bus-core-api:

<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-web-ui</groupId>
   <artifactId>app-web-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <dependencies>
      <dependency>
      <groupId>bus-core-api</groupId>
         <artifactId>bus-core-api</artifactId>
         <version>1.0-SNAPSHOT</version>
      </dependency>
   </dependencies>
</project>

مشروع app-desktop-ui يستخدم إصدار السnapshot 1.0 لمشروع bus-core-api:

<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-desktop-ui</groupId>
   <artifactId>app-desktop-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <dependencies>
      <dependency>
      <groupId>bus-core-api</groupId>
         <artifactId>bus-core-api</artifactId>
         <version>1.0-SNAPSHOT</version>
      </dependency>
   </dependencies>
</project>

مشروع bus-core-api:

<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>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>   
</project>

الآن، يطلب فريق مشروع app-web-ui و app-desktop-ui أن يتمكن عملية التجميع الخاصة بهم من بدء التشغيل بغض النظر عن تغييرات مشروع bus-core-api.

استخدام الإصدار السريع يمكن التأكد من استخدام أحدث إصدار من مشروع bus-core-api، ولكن من أجل الوصول إلى المتطلبات المذكورة أعلاه، سنحتاج إلى القيام ببعض العمل الإضافي.

يمكن استخدام طريقتين:

  • إضافة هدف عمل post-build إلى ملف pom لمشروع bus-core-api لبدء تجميع مشاريع app-web-ui و app-desktop-ui.

  • استخدام خادم التجميع المستمر (CI) مثل Hudson لإدارة التجميع التلقائي.

استخدام Maven

تعديل ملف pom.xml لمشروع bus-core-api.

<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>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <build>
   <plugins>
   <plugin>
      <artifactId>maven-invoker-plugin</artifactId>
      <version>1.6</version>
      <configuration>
         <debug>true</debug>
         <pomIncludes>
            <pomInclude>app-web-ui/pom.xml</pomInclude>
            <pomInclude>app-desktop-ui/pom.xml</pomInclude> 
         </pomIncludes>
      </configuration>
      <executions>
         <execution>
            <id>build</id>
            <goals>
               <goal>run</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
   </plugins>
   </build>
</project>

افتح محطة الأوامر، انتقل إلى مجلد C:\ > MVN > bus-core-api، ثم اتبع الأوامر التالية.

C:\MVN\bus-core-api>mvn clean package -U

بعد تنفيذ الأمر، ستبدأ Maven في بناء مشروع bus-core-api.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO]    task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

بعد إكمال بناء bus-core-api، ستبدأ Maven في بناء مشروع app-web-ui.

[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui 
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

بعد إكمال بناء app-web-ui، ستبدأ Maven في بناء مشروع app-desktop-ui.

[INFO] ------------------------------------------------------------------
[INFO] Building app-desktop-ui 
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------

استخدام خادم التكامل المستمر (CI)

إذا كنت تستخدم خادم CI، فإنك لست بحاجة إلى تحديث pom لمشروع bus-core-api عند إضافة مشروع جديد، مثل app-mobile-ui في المثال، كاعتماد لمشروع bus-core-api. سيساعدك Hudson في إنشاء المشاريع تلقائيًا باستخدام ميزة إدارة الاعتمادات الخاصة بـ Maven.

يعد Hudson بناء كل مشروع بناءً. بعد إرسال إدخال الكود لمشروع إلى SVN (أو أي أداة إدارة ملفات مرتبطة بمهندس Hudson)، يبدأ Hudson في مهمة بناء المشروع، ويبدأ بعد إكمال مهمة البناء، في إطلاق مهمات بناء المعتمدين الآخرين (بناء مشاريع الاعتمادات الأخرى).

في المثال أعلاه، عند تحديث ملف المصدر bus-core-ui في SVN، يبدأ Hudson في بناء المشروع. بمجرد إتمام البناء، يبدأ Hudson في البحث عن المشاريع المعتمدة، ثم يبدأ في بناء مشاريع app-web-ui و app-desktop-ui.