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

POM لـ Maven

POM (Project Object Model، نموذج موضوع مشروع) هو وحدة العمل الأساسية لمشروع Maven، وهو ملف XML يحتوي على معلومات أساسية عن المشروع، ويستخدم لوصف كيفية بناء المشروع، وتحديد اعتمادات المشروع، وما إلى ذلك.

عند تنفيذ المهمة أو الهدف، يقوم Maven بالبحث في مجلد الحالي عن POM. يقرأ POM، ويحصل على معلومات التكوين المطلوبة، ثم ينفذ الهدف.

يمكن تحديد التكوين التالي في POM:

  • اعتماد المشروع

  • الملحقات

  • الهدف التنفيذي

  • ملف الملفات المبنية للمشروع

  • إصدار المشروع

  • قائمة مطوري المشروع

  • معلومات قائمة البريد

قبل إنشاء POM، يجب علينا أولاً وصف مجموعة المشروع (groupId)، وهو رمز فريد لمشروع.

<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>
    <!-- هو علامة مميزة فريدة للشركة أو المنظمة، وسيتم إنشاء المسار المحدد عند التكوين، مثل com.companyname.project-group، وسيضع Maven مكتبة المشروع في المسار المحلي: /com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- هو معرف المشروع الفريد، يمكن أن يكون هناك عدة مشاريع تحت groupId واحد، يتم التمييز بينها بواسطة artifactId -->
    <artifactId>project</artifactId>
 
    <!-- رقم الإصدار -->
    <version>1.0</version>
</project>

كل ملف POM يجب أن يحتوي على عنصر project وثلاثة حقول ضرورية: groupId،artifactId،version.

النقطةالوصف
projectالشعبة الجذرية للمشروع.
modelVersionيجب تعيين إصدار النموذج إلى 4.0.
groupIdهذا هو معرف مجموعة المشروع. عادة ما يكون فريدًا داخل المنظمة أو المشروع. على سبيل المثال، منظمة مصرفية com.companyname.project-group تملك جميع المشاريع المتعلقة بالمصارف.
artifactIdهذا هو معرف المشروع. عادة ما يكون اسم المشروع. على سبيل المثال، مصرف المستهلك. يتم تعريف موقع artifact في المخزن من خلال groupId و artifactId معًا.
version

هذا هو إصدار المشروع. في مخزن artifact، يتم استخدامه للتمييز بين الإصدارات المختلفة. على سبيل المثال:

com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1

POM الأب (Super POM)

POM الأب (Super POM) هو POM الافتراضي لمaven. جميع POMs تنحدر من POM الأب (حتى لو لم يتم تعريف POM الأب بشكل صريح). يحتوي POM الأب على بعض الإعدادات الافتراضية التي يمكن توريثها. لذلك، عندما يجد Maven الحاجة إلى تنزيل الاعتمادات من POM، يذهب إلى الرف الافتراضي المحدد في Super POM http://repo1.maven.org/maven2 لتنزيلها.

يستخدم Maven effective pom (Super pom بالإضافة إلى إعدادات المشروع الخاص بك) لتنفيذ الأهداف ذات الصلة، مما يساعد المطورين على القيام بكمية أقل من التكوين في ملف pom.xml، ولكن يمكن تعديل هذه الإعدادات.

استخدم الأمر التالي لعرض إعدادات Super POM الافتراضية:

mvn help:effective-pom

الآن سنقوم بإنشاء مجلد MVN/project، ثم سنقوم بإنشاء ملف pom.xml في هذا المجلد، ويكون محتواه كالتالي:

<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>
    <!-- هو علامة مميزة فريدة للشركة أو المنظمة، وسيتم إنشاء المسار المحدد عند التكوين، مثل com.companyname.project-group، وسيضع Maven مكتبة المشروع في المسار المحلي: /com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- هو معرف المشروع الفريد، يمكن أن يكون هناك عدة مشاريع تحت groupId واحد، يتم التمييز بينها بواسطة artifactId -->
    <artifactId>project</artifactId>
 
    <!-- رقم الإصدار -->
    <version>1.0</version>
</project>

في وحدة التحكم بالأوامر، انتقل إلى مجلد MVN/project، وأecute الأمر التالي:

C:\MVN\project>mvn help:effective-pom

Maven سوف يبدأ بمعالجة عرض effective-pom.

[INFO] البحث عن المشاريع...
تحميل: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] الوقت الإجمالي: 01:36 دقيقة
[INFO] انتهت في: 2018-09-05T11:31:28+08:00
[INFO] الذاكرة النهائية: 15M/149M
[INFO] ------------------------------------------------------------------------

نتائج POM النشط تشبه ما يظهر في الشاشة التشغيل، بعد الإرث والتبديل، مما يجعل التكوين فعالًا.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================== -->

<!-- تم إنشاء هذا النص بواسطة Maven Help Plugin في 2012-07-05T11:41:51 -->
<!-- وراء: http://maven.apache.org/plugins/maven-help-plugin/ -->

<!-- ================================================================== -->
 
<!-- ================================================================== -->




<!-- ================================================================== -->
 
<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 h
http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.companyname.project-group</groupId>
  <artifactId>project</artifactId>
  <version>1.0</version>
  <build>
    <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
    <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
    <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
    <resources>
      <resource>
        <mergeId>resource-0</mergeId>
        <directory>C:\MVN\project\src\main\resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <mergeId>resource-1</mergeId>
        <directory>C:\MVN\project\src\test\resources</directory>
      </testResource>
    </testResources>
    <directory>C:\MVN\project\target</directory>
    <finalName>project-1.0</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>مaven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>مaven-assembly-plugin</artifactId>
          <version>2.2-beta-2</version>
        </plugin>
        <plugin>
          <artifactId>مaven-clean-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>مaven-compiler-plugin</artifactId>
          <version>2.0.2</version>
        </plugin>
        <plugin>
          <artifactId>مaven-dependency-plugin</artifactId>
          <version>2.0</version>
        </plugin>
        <plugin>
          <artifactId>مaven-deploy-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <artifactId>مaven-ear-plugin</artifactId>
          <version>2.3.1</version>
        </plugin>
        <plugin>
          <artifactId>مaven-ejb-plugin</artifactId>
          <version>2.1</version>
        </plugin>
        <plugin>
          <artifactId>مaven-install-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>مaven-jar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>مaven-javadoc-plugin</artifactId>
          <version>2.5</version>
        </plugin>
        <plugin>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-rar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.0-beta-8</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>2.0-beta-7</version>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.0.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.1-alpha-2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-help-plugin</artifactId>
        <version>2.1.1</version>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>لوحة تحكم مكتبة Maven</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>مكتبة ملحقات Maven</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <reporting>
    <outputDirectory>C:\MVN\project\target\site</outputDirectory>
  </reporting>
</project>

في الملف pom.xml أعلاه، يمكنك رؤية أن Maven يحتاج إلى بنية مجلد المصدر للمشروع، مجلد الإخراج، والملحقات المطلوبة، والمكتبات والمجلدات التقريرية عند تنفيذ الهدف.

لا يتطلب ملف pom.xml الخاص بـ Maven كتابة يدوية.

يقدم Maven العديد من أجهزة الاستنساخ لتوليد المشاريع، بما في ذلك بنية المشروع وpom.xml.

مفصل POM العلامات

<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.0http://maven.apache.org/maven-v4_0_0.xsd">
    موقع المشروع الأم. إذا لم يتم تحديد قيمة عنصر معين في المشروع، فإن القيمة في المشروع الأم تكون القيمة الافتراضية للمشروع. تتضمن الموقع IDs المجموعة، IDs المكون، 
        الإصدار.
    <parent>
        مؤشر مؤشر المكون للمشروع الأم الموروث
        <artifactId />
        مؤشر العنصر العالمي الفريد للمشروع الأم الموروث
        <groupId />
        مؤشر إصدار المشروع الأم الموروث
        <version />
        مؤشر مسار pom.xml المكون من مشروع الأم. يسمح المسار المطلق باختيار مسار مختلف. القيمة الافتراضية هي ../pom.xml. يبحث Maven أولاً في المكان الذي يتم بناء المشروع الحالي. 
            الPOM الهدف، أولاً في هذا المكان في النظام الملفات (في موقع relativePath)، ثم في المستودع المحلي، وأخيرًا في المستودع البعيد يبحث عن pom المشاريع الأم.
        <relativePath />
    </parent>
    يُعلن أن وصف مشروع POM يتبع إصدارًا من نموذج POM. يُغيّر إصدار النموذج نفسه نادرًا، ومع ذلك، يبقى ضروريًا، وهو لضمان الاستقرار عند إدخال Maven لميزات جديدة أو تغييرات في النموذج.
    <modelVersion>4.0.0</modelVersion>
    مؤشر العنصر العالمي الفريد لمشروع، عادة ما يستخدم اسم المجموعة المحددة بشكل كامل لتحديد المشروع من بين الأخرين. وكذلك فإن المسار المولد أثناء البناء يتم إنشاؤه من خلال هذا، مثل مسار /com/mycompany/app المولد بشكل مطلق لـ com.mycompany.app--
    <groupId>asia.banseon</groupId>
    مؤشر المكون، وهو مع ID المجموعة يحدد مكونًا واحدًا بشكل فريد. على الأقل، لا يمكنك أن يكون لديك مشاريعين مختلفين يمتلكان نفس ID المكون والID المجموعة؛ في بعض 
        يجب أن يكون ID المجموعة المحددة مسبقًا فريدًا أيضًا لـ artifact ID. المكون هو شيء يتم إنتاجه أو استخدامها في المشروع، والمكونات التي ينتجها Maven للمشروع تشمل: JARs، ملفات المصدر، إصدارات ثنائية ونماذج WAR. -->
    <artifactId>banseon-maven2</artifactId>
    <!-- نوع المكونات التي ينتجها المشروع، مثل jar、war、ear、pom. يمكن للمكونات الإضافية إنشاء أنواع مكوناتها الخاصة، لذا ليست القائمة مكتملة. -->
    <packaging>jar</packaging>
    <!-- إصدار المشروع الحالي، صيغته: إصدار رئيسي.إصدار فرعي.إصدار تدرج-رقم الإصدار المحدود -->
    <version>1.0-SNAPSHOT</version>
    <!-- اسم المشروع، تستخدم الوثائق التي ينتجها Maven. -->
    <name>banseon-maven</name>
    <!-- عنوان صفحة الويب الخاصة بالمشروع، تستخدم الوثائق التي ينتجها Maven. -->
    <url>http://www.baidu.com/banseon</url>
    <!-- وصف المشروع التفصيلي، تستخدم الوثائق التي ينتجها Maven. عند استخدام هذا العنصر باستخدام صيغة HTML (عندما يتم تمرير النص في البيانات المدمجة، فإن النص سيتم تجاهله من قبل معالج البيانات)، يمكن تضمين HTML. --> 
        )، لا يُشجع استخدام وصف النص النقي. إذا كنت بحاجة إلى تعديل صفحة البحث في الموقع الإلكتروني المنشأ، يجب عليك تعديل ملف صفحة البحث الخاصة بك، وليس تعديل هذه الوثيقة. -->
    <description>مشروع Maven لدراسة Maven.</description>
    <!-- وصف هذا المشروع لبيئة بناء المشروع. -->
    <prerequisites>
        <!-- أحدث إصدار من Maven المطلوب لبناء هذا المشروع أو استخدام هذا المكون الإضافي -->
        <maven />
    </prerequisites>
    <!-- اسم نظام إدارة المشكلات (Bugzilla، Jira، Scarab، أو أي نظام إدارة مشكلات تفضلونه) و عنوانه URL، هذا المثال هو jira -->
    <issueManagement>
        <!-- اسم نظام إدارة المشكلات (مثل jira) -->
        <system>jira</system>
        <!-- عنوان نظام إدارة المشروع المستخدم لهذا المشروع -->
        <url>http://jira.baidu.com/banseon</url>
    </issueManagement>
    <!-- معلومات التكامل المستمر للمشروع -->
    <ciManagement>
        <!-- النظام المتكامل المستمر بالاسم، مثل continuum -->
        <system />
        <--该项目使用的持续集成系统的URL(如果持续集成系统有web接口的话)。 -->
        <url />
        <--构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告) -->
        <notifiers>
            <--配置一种方式,当构建中断时,以该方式通知用户/开发者 -->
            <notifier>
                <--传送通知的途径 -->
                <type />
                <--发生错误时是否通知 -->
                <sendOnError />
                <--构建失败时是否通知 -->
                <sendOnFailure />
                <--构建成功时是否通知 -->
                <sendOnSuccess />
                <--发生警告时是否通知 -->
                <sendOnWarning />
                <--不赞成使用。通知发送到哪里 -->
                <address />
                <--扩展配置项 -->
                <configuration />
            </notifier>
        </notifiers>
    </ciManagement>
    <--项目创建年份,4位数字。当产生版权信息时需要使用这个值。 -->
    <inceptionYear />
    <--项目相关邮件列表信息 -->
    <mailingLists>
        <--该元素描述了项目相关的所有邮件列表。自动产生的网站引用这些信息。 -->
        <mailingList>
            <--邮件的名称 -->
            <name>Demo</name>
            <--发送邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 -->
            <post>[email protected]</post>
            <--订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 -->
            <subscribe>[email protected]</subscribe>
            <--取消订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 -->
            <unsubscribe>[email protected]</unsubscribe>
            <--你可以浏览邮件信息的URL -->
            <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>
        </mailingList>
    </mailingLists>
    <!--قائمة مطوري المشروع -->
    <developers>
        <!--معلومات مطور المشروع المحددة -->
        <developer>
            <!--معرف المطورين للمشروع في SCM هو معرف فريد -->
            <id>HELLO WORLD</id>
            <!--الاسم الكامل للمطورين للمشروع -->
            <name>banseon</name>
            <!--البريد الإلكتروني للمطورين للمشروع -->
            <email>[email protected]</email>
            <!--URL الصفحة الرئيسية للمطورين للمشروع -->
            <url />
            <!--الأدوار التي يلعبها مطورو المشروع في المشروع، يصف element role دورة متنوعة من الأدوار -->
            <roles>
                <role>Project Manager</role>
                <role>Architect</role>
            </roles>
            <!--المنظمة التي ينتمي إليها مطور المشروع -->
            <organization>demo</organization>
            <!--URL المنظمة التي ينتمي إليها مطور المشروع -->
            <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>
            <!--خصائص مطوري المشروع، مثل كيفية التعامل مع الرسائل الفورية وما إلى ذلك -->
            <properties>
                <dept>No</dept>
            </properties>
            <!--المنطقة الزمنية للمطورين للمشروع، عدد صحيح في نطاق -11 إلى 12. -->
            <timezone>-5</timezone>
        </developer>
    </developers>
    <!--قائمة المساهمون الآخرين للمشروع -->
    <contributors>
        <!--المساهمون الآخرين للمشروع. انظر إلى element developer في developers/ -->
        <contributor>
            <name />
            <email />
            <url />
            <organization />
            <organizationUrl />
            <roles />
            <timezone />
            </properties />
        </contributor>
    </contributors>
    <!--المكون هذا يصف قائمة جميع الرخص لمشروع. يجب أن يتم عرض قائمة الرخصة لمشروع فقط، وليس قائمة رخصة المكونات الاعتماد. إذا تم عرض عدة رخص، يمكن للمستخدم اختيار واحدة منها بدلاً من قبول جميع الرخص. -->
    <licenses>
        <!--描述了项目的license,用于生成项目的web站点的license页面,其他一些报表和validation也会用到该元素。 -->
        <license>
            <!--license用于法律上的名称 -->
            <name>Apache 2</name>
            <!--官方的license正文页面的URL -->
            <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url>
            <!--项目分发的主要方式:repo,可以从Maven库下载 manual,用户必须手动下载和安装依赖 -->
            <distribution>repo</distribution>
            <!--关于license的补充信息 -->
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>
    <!--SCM(Source Control Management)标签允许你配置你的代码库,供Maven web站点和其它插件使用。 -->
    <scm>
        <!--SCM的URL,该URL描述了版本库和如何连接到版本库。欲知详情,请看SCMs提供的URL格式和列表。该连接只读。 -->
        <connection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
        </connection>
        <!--给开发者使用的,类似connection元素。即该连接不仅仅只读 -->
        <developerConnection>
            scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
        </developerConnection>
        <!--当前代码的标签,在开发阶段默认为HEAD -->
        <tag />
        <!--指向项目的可浏览SCM库(例如ViewVC或者Fisheye)的URL。 -->
        <url>http://svn.baidu.com/banseon</url>
    </scm>
    <!--وصف الخصائص المختلفة للمنظمة التي ينتمي إليها المشروع. يتم استخدام المستندات التي ينتجها Maven.-->
    <organization>
        <!--الاسم الكامل للمنظمة-->
        <name>demo</name>
        <!--رابط صفحة المنظمة-->
        <url>http://www.baidu.com/banseon</url>
    </organization>
    <!--المعلومات المطلوبة لبناء المشروع-->
    <build>
        <!--يحدد هذا العنصر مجلد ملفات المصدر للمشروع، ويتم تجميع ملفات المصدر في هذا المجلد عند تجميع المشروع. المسار هو المسار النسبي لل pom.xml.-->
        <sourceDirectory />
        <!--يحدد هذا العنصر مجلد ملفات المصدر للسكريبتات، هذا المجلد مختلف عن مجلد المصدر: في معظم الحالات، يتم نسخ محتويات هذا المجلد إلى مجلد الإخراج ( لأن السكريبتات يتم تفسيرها وليس تجميعها ).-->
        <scriptSourceDirectory />
        <!--يحدد هذا العنصر مجلد ملفات المصدر التي تستخدمها وحدة الاختبار للمشروع، ويتم تجميع ملفات المصدر في هذا المجلد عند اختبار المشروع. المسار هو المسار النسبي لل pom.xml.-->
        <testSourceDirectory />
        <!--مجلد لتخزين ملفات class المكتوبة بعد التجميع للبرنامج-->
        <outputDirectory />
        <!--مجلد لتخزين ملفات class المكتوبة بعد التجميع للاختبار-->
        <testOutputDirectory />
        <!--يستخدم توسيعات البناء من هذا المشروع ككل-->
        <extensions>
            <!--يصف التوسع المستخدم في البناء-->
            <extension>
                <!--groupId للتوسيع البني-->
                <groupId />
                <!--artifactId للتوسيع البني-->
                <artifactId />
                <!--إصدار توسيع البناء-->
                <version />
            </extension>
        </extensions>
        <!--القيمة الافتراضية عند عدم تحديد الهدف للمشروع (Maven2 يُدعى المرحلة)-->
        <defaultGoal />
        <!--يصف هذا العنصر قائمة جميع مسارات الموارد المتعلقة بالمشروع، مثل ملفات الخاصية المتعلقة بالمشروع، وتُضمن هذه الموارد في ملفات التعبئة النهائية.-->
        <resources>
            <!--يصف هذا العنصر جميع مسارات الموارد المتعلقة بالمشروع أو الاختبار-->
            <resource>
                <!--وصف مسار الهدف للمورد. المسار مطلقًا بناءً على مجلد target/classes (مثل ${project.build.outputDirectory}). على سبيل المثال 
                    <!--إذا كنت ترغب في وضع الموارد في حزمة معينة (org.apache.maven.messages)، يجب عليك إعداد هذا العنصر إلى org/apache/maven/messages. ومع ذلك، إذا كنت ترغب فقط في وضع الموارد في بنية مجلدات الكود المصدر، فإنه لا يحتاج إلى هذا الإعداد. -->
                <targetPath />
                <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 -->
                <filtering />
                <!--描述存放资源的目录,该路径相对POM路径 -->
                <directory />
                <!--包含的模式列表,例如**/*.xml. -->
                <includes />
                <!--排除的模式列表,例如**/*.xml -->
                <excludes />
            </resource>
        </resources>
        <!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。 -->
        <testResources>
            <!--这个元素描述了测试相关的所有资源路径,参见build/resources/resource元素的说明 -->
            <testResource>
                <targetPath />
                <filtering />
                <directory />
                <includes />
                <excludes />
            </testResource>
        </testResources>
        <!--构建产生的所有文件存放的目录 -->
        <directory />
        <!--产生的构件的文件名,默认值是${artifactId}-${version}。 -->
        <finalName />
        <!--当filtering开关打开时,使用到的过滤器属性文件列表 -->
        <filters />
        <!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置 -->
        <pluginManagement>
            <!--使用的插件列表 。 -->
            <plugins>
                <!--plugin元素包含描述插件所需要的信息。 -->
                <plugin>
                    <!--插件在仓库里的group ID -->
                    <groupId />
                    <!--插件在仓库里的artifact ID -->
                    <artifactId />
                    <!--被使用的插件的版本(或版本范围) -->
                    <version />
                    <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。 -->
                    <extensions />
                    <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 -->
                    <executions>
                        <!--execution元素包含了插件执行需要的信息 -->
                        <execution>
                            <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 -->
                            <id />
                            <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 -->
                            <phase />
                            <!--配置的执行目标 -->
                            <goals />
                            <--هل يتم نقل التكوين إلى POM الفرعي.-->
                            <inherited />
                            <--تكوين DOM المستخدم.-->
                            <configuration />
                        </execution>
                    </executions>
                    <--الاعتماد الإضافي المطلوب لاستيراد الأدوات.-->
                    <dependencies>
                        <!-- 参见 dependencies/dependency 元素 -->
                        <dependency>
                            ......
                        </dependency>
                    </dependencies>
                    <!-- 任何配置是否被传播到子项目 -->
                    <inherited />
                    <--تكوين DOM المستخدم.-->
                    <configuration />
                </plugin>
            </plugins>
        </pluginManagement>
        <--قائمة الأدوات المستخدمة.-->
        <plugins>
            <--参见build/pluginManagement/plugins/plugin元素 -->
            <plugin>
                <groupId />
                <artifactId />
                <version />
                <extensions />
                <executions>
                    <execution>
                        <id />
                        <phase />
                        <goals />
                        <inherited />
                        <configuration />
                    </execution>
                </executions>
                <dependencies>
                    <!-- 参见 dependencies/dependency 元素 -->
                    <dependency>
                        ......
                    </dependency>
                </dependencies>
                <goals />
                <inherited />
                <configuration />
            </plugin>
        </plugins>
    </build>
    <--قائمة profiles المدرجة في المشروع، إذا تم تفعيلها، ستغير عملية البناء.-->
    <profiles>
        <--تفعيل عملية البناء بناءً على معلمات البيئة أو معلمات السطر.-->
        <profile>
            <--معرف فريد لتكوين البناء. يمكن استخدامه أيضًا لتفعيل command line، وكذلك للدمج مع profile تمتلك نفس المعرف عند النقل.-->
            <id />
            <--المنطق الحالي الذي يسبب تفعيل profile تلقائيًا. Activation هو المفتاح الذي يفتح profile. القوة في profile تأتي من قدرتها على استخدام القيم المحددة في بيئات معينة تلقائيًا؛ هذه البيئات يتم تحديدها من خلال عنصر activation. لا يعتبر عنصر activation هو الطريقة الوحيدة لتفعيل profile.-->
            <activation>
                <--علامة مؤشر لتحديد ما إذا كان profile يتم تفعيله بشكل افتراضي-->
                <activeByDefault />
                <--عند اكتشاف JDK المطابق، يتم تفعيل profile. على سبيل المثال، يُشغل JDK1.4، 1.4.0_2، بينما يُشغل !1.4 جميع إصدارات JDK التي لا تبدأ بـ 1.4.-->
                <jdk />
                <--عند اكتشاف خاصية نظام التشغيل المطابقة، يتم تفعيل profile. يمكن لتكوين os تعريف بعض الخاصيات المتعلقة بنظام التشغيل.-->
                <os>
                    <--جعل اسم نظام التشغيل profile نشطا-->
                    <name>Windows XP</name>
                    <--جعل عائلة نظام التشغيل profile نشطا (مثل 'windows')-->
                    <family>Windows</family>
                    <--جعل بنية نظام التشغيل profile نشطا-->
                    <arch>x86</arch>
                    <--جعل إصدار نظام التشغيل profile نشطا-->
                    <version>5.1.2600</version>
                </os>
                <--إذا اكتشف Maven خاصية معينة (يمكن تمرير قيمتها من خلال ${اسم} في POM)، فإنها تملك الاسم والمقدار الم对应، سيتم تفعيل profile. إذا كان حقل القيمة فارغًا، فإن وجود حقل اسم الخاصية سيشغل profile، وإلا يتم مطابقة حقل قيمة الخاصية بطريقة معيارية الحروف الكبيرة والصغيرة-->
                <property>
                    <--جعل اسم خاصية profile نشطا-->
                    <name>mavenVersion</name>
                    <--激活profile的属性的值 -->
                    <value>2.0.3</value>
                </property>
                <--提供一个文件名,通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在,如果不存在则激活 profile。另一方面,exists则会检查文件是否存在,如果存在则激活profile。 -->
                <file>
                    <--如果指定的文件存在,则激活profile。 -->
                    <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
                    </exists>
                    <--如果指定的文件不存在,则激活profile。 -->
                    <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
                    </missing>
                </file>
            </activation>
            <--构建项目所需要的信息。参见build元素 -->
            <build>
                <defaultGoal />
                <resources>
                    <resource>
                        <targetPath />
                        <filtering />
                        <directory />
                        <includes />
                        <excludes />
                    </resource>
                </resources>
                <testResources>
                    <testResource>
                        <targetPath />
                        <filtering />
                        <directory />
                        <includes />
                        <excludes />
                    </testResource>
                </testResources>
                <directory />
                <finalName />
                <filters />
                <pluginManagement>
                    <plugins>
                        <--参见build/pluginManagement/plugins/plugin元素 -->
                        <plugin>
                            <groupId />
                            <artifactId />
                            <version />
                            <extensions />
                            <executions>
                                <execution>
                                    <id />
                                    <phase />
                                    <goals />
                                    <inherited />
                                    <configuration />
                                </execution>
                            </executions>
                            <dependencies>
                                <!-- 参见 dependencies/dependency 元素 -->
                                <dependency>
                                    ......
                                </dependency>
                            </dependencies>
                            <goals />
                            <inherited />
                            <configuration />
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <--参见build/pluginManagement/plugins/plugin元素 -->
                    <plugin>
                        <groupId />
                        <artifactId />
                        <version />
                        <extensions />
                        <executions>
                            <execution>
                                <id />
                                <phase />
                                <goals />
                                <inherited />
                                <configuration />
                            </execution>
                        </executions>
                        <dependencies>
                            <!-- 参见 dependencies/dependency 元素 -->
                            <dependency>
                                ......
                            </dependency>
                        </dependencies>
                        <goals />
                        <inherited />
                        <configuration />
                    </plugin>
                </plugins>
            </build>
            <--المكونات (أو المشاريع الفرعية) التي تصبح جزءًا من المشروع. كل عنصر مكون يشير إلى مسار الدليل المطلق للمكون-->
            <modules />
            <--قائمة المستودعات البعيدة المكتشفة لاستكشاف الاعتمادات والمدخلات-->
            <repositories>
                <--参见repositories/repository元素 -->
                <repository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </repository>
            </repositories>
            <!-- قائمة المستودعات البعيدة لاكتشاف التكوينات، هذه التكوينات تستخدم لبناء وتوليد التقارير. -->
            <pluginRepositories>
                <!-- يحتوي على معلومات الاتصال بمستودعات التكوين البعيدة. انظر إلى elements/repository في repositories. -->
                <pluginRepository>
                    <releases>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </releases>
                    <snapshots>
                        <enabled />
                        <updatePolicy />
                        <checksumPolicy />
                    </snapshots>
                    <id />
                    <name />
                    <url />
                    <layout />
                </pluginRepository>
            </pluginRepositories>
            <!-- يصف هذا العنصر جميع الاعتمادات المتعلقة بالمشروع. تشكل هذه الاعتمادات مراحل من عملية بناء المشروع. يتم تنزيلها تلقائيًا من مستودعات المشروع المحددة. للحصول على مزيد من المعلومات، انظر ميكانيكية اعتمادات المشروع. -->
            <dependencies>
                <!-- 参见 dependencies/dependency 元素 -->
                <dependency>
                    ......
                </dependency>
            </dependencies>
            <!--不赞成使用. 现在Maven忽略该元素. -->
            <reports />
            <--يحتوي هذا العنصر على معايير إنتاج التقارير. عند تنفيذ "mvn site"، يتم تشغيل هذه التقارير. يمكن رؤية روابط جميع التقارير في قائمة التوجيه في الصفحة. انظر إلى عنصر reporting-->
            <reporting>
                ......
            </reporting>
            <--انظر إلى عنصر dependencyManagement-->
            <dependencyManagement>
                <dependencies>
                    <!-- 参见 dependencies/dependency 元素 -->
                    <dependency>
                        ......
                    </dependency>
                </dependencies>
            </dependencyManagement>
            <--انظر إلى عنصر distributionManagement-->
            <distributionManagement>
                ......
            </distributionManagement>
            <--انظر إلى عنصر properties-->
            </properties />
        </profile>
    </profiles>
    <--المكونات (أو المشاريع الفرعية) التي تصبح جزءًا من المشروع. كل عنصر مكون يشير إلى مسار الدليل المطلق للمكون-->
    <modules />
    <--قائمة المستودعات البعيدة المكتشفة لاستكشاف الاعتمادات والمدخلات-->
    <repositories>
        <--يحتوي على معلومات الاتصال المطلوبة للوصول إلى المستودع البعيد-->
        <repository>
            <--كيفية التعامل مع تحميلات الإصدارات في المستودع البعيد-->
            <releases>
                <--true أو false يعني ما إذا كان المستودع المحدد مفتوحًا للتحميلات لنوع معين من المكونات (إصدار إصدار، إصدار سريع) أو لا.-->
                <enabled />
                <--يحدد هذا العنصر تردد التحديث. سيزيد Maven من وقت التوقيت المحلي لملف POM والوقت المحلي لملف POM البعيد. الخيارات المتاحة هي: always (دائمًا)، daily (افتراضي، يومي)، interval: X (هنا X هو فاصل زمني بالدقائق)، أو never (أبدًا).-->
                <updatePolicy />
                <--ما الذي سيقوم به Maven عند فشل التحقق من ملفات التحقق من المكونات: ignore (تخطي)، fail (فشل)، أو warn (تحذير).-->
                <checksumPolicy />
            </releases>
            <--كيفية التعامل مع تحميلات الإصدارات السريعة في المستودع البعيد. مع وجود إعدادات releases وsnapshots، يمكن للـ POM اتخاذ إجراءات مختلفة لكل نوع من المكونات في كل مستودع فردي--> 
                سياسة. على سبيل المثال، قد يقرر شخص ما فتح دعم التحميلات للإصدارات السريعة فقط لأغراض التطوير. انظر إلى عنصر repositories/repository/releases-->
            <snapshots>
                <enabled />
                <updatePolicy />
                <checksumPolicy />
            </snapshots>
            <--معرف المستودع البعيد. يمكن استخدامه للتوافق مع المستودع البعيد المضبوط في ملف settings.xml-->
            <id>banseon-repository-proxy</id>
            <--اسم المستودع البعيد-->
            <name>banseon-repository-proxy</name>
            <!-- عنوان مستودع التكوين البعيد، بشكل protocol://hostname/path -->
            <url>http://192.168.1.169:9999/repository/</url>
            <!-- نوع ترتيب مستودعات التكوينات لتحديد المكونات وتسلسلها - يمكن أن يكون default (المحدد بشكل افتراضي) أو legacy (القديم). يقدم Maven 2 تنسيقًا افتراضيًا للمستودعات؛ 
                لكن، Maven 1.x يحتوي على تنسيق مختلف. يمكننا استخدام هذا العنصر لتحديد ما إذا كان التنسيق هو default (المحدد بشكل افتراضي) أو legacy (القديم). -->
            <layout>default</layout>
        </repository>
    </repositories>
    <!-- قائمة المستودعات البعيدة لاكتشاف التكوينات، هذه التكوينات تستخدم لبناء وتوليد التقارير. -->
    <pluginRepositories>
        <!-- يحتوي على معلومات الاتصال بمستودعات التكوين البعيدة. انظر إلى elements/repository في repositories. -->
        <pluginRepository>
            ......
        </pluginRepository>
    </pluginRepositories>
 
 
    <!-- يصف هذا العنصر جميع الاعتمادات المتعلقة بالمشروع. تشكل هذه الاعتمادات مراحل من عملية بناء المشروع. يتم تنزيلها تلقائيًا من مستودعات المشروع المحددة. للحصول على مزيد من المعلومات، انظر ميكانيكية اعتمادات المشروع. -->
    <dependencies>
        <dependency>
            <!-- ID مجموعة الاعتماد -->
            <groupId>org.apache.maven</groupId>
            <!-- ID المكون المعبأ للاعتماد -->
            <artifactId>maven-artifact</artifactId>
            <!-- رقم النسخة للاعتماد. في Maven 2، يمكن تكوينه كمدى نسخة. -->
            <version>3.8.1</version>
            <!-- نوع الاعتماد، النوع المحدد بشكل افتراضي هو jar. عادة ما يمثل اسم ملفات الاعتماد، ولكن هناك استثناءات. يمكن تحويل نوع إلى اسم امتداد آخر أو قسائم. النوع عادة ما يتطابق مع طريقة الت打包 المستخدمة، 
                على الرغم من أن هناك استثناءات. بعض الأمثلة على الأنواع: jar،war،ejb-client و test-jar. إذا تم تعيين extensions إلى true، يمكن تعريف نوع جديد في plugin. لذلك، ليست أمثلة النوع كاملة. -->
            <type>jar</type>
            <!-- القسائم. يمكن للقسائم التمييز بين المكونات التي تنتمي إلى نفس POM ولكن لها طرق بناء مختلفة. يضاف اسم القسيمة بعد رقم النسخة من اسم الملف. على سبيل المثال، إذا كنت ترغب في بناء عنصرين منفصلين، 
                JAR،一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。 -->
            <classifier></classifier>
            <!--依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。 - compile :默认范围,用于编译 - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath 
                - runtime: 在执行时需要使用 - test: 用于test任务时使用 - system: 需要外在提供相应的元素。通过systemPath来取得 
                - systemPath: 仅用于范围为system。提供相应的路径 - optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用 -->
            <scope>test</scope>
            <!--仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖指定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。 -->
            <systemPath></systemPath>
            <!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 -->
            <exclusions>
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
            <!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。 -->
            <optional>true</optional>
        </dependency>
    </dependencies>
    <!--不赞成使用. 现在Maven忽略该元素. -->
    <reports></reports>
    <!--该元素描述使用报表插件产生报表的规范。当用户执行"mvn site",这些报表就会运行。 在页面导航栏能看到所有报表的链接。 -->
    <reporting>
        <!-- true,则,网站不包括默认的报表。这包括 "项目信息" 菜单中的报表。 -->
        <excludeDefaults />
        <!-- 所有产生的报表存放到哪里。默认值是 ${project.build.directory}/site。 -->
        <outputDirectory />
        <!-- 使用的报表插件和他们的配置。 -->
        <plugins>
            <!-- plugin 元素包含描述报表插件需要的信息 -->
            <plugin>
                <!-- 报表插件在仓库里的 group ID -->
                <groupId />
                <!-- 报表插件在仓库里的 artifact ID -->
                <artifactId />
                <!-- 被使用的报表插件的版本(或版本范围) -->
                <version />
                <!-- 任何配置是否被传播到子项目 -->
                <inherited />
                <!-- 报表插件的配置 -->
                <configuration />
                <!-- 一组报表的多重规范,每个规范可能有不同的配置。一个规范(报表集)对应一个执行目标 。例如,有 1,2,3,4,5,6,7,8,9 个报表。1,2,5 构成 A 报表集,对应一个执行目标。2,5,8 构成 B 报表集,对应另一个执行目标 -->
                <reportSets>
                    <!-- 表示报表的一个集合,以及产生该集合的配置 -->
                    <reportSet>
                        <!-- 报表集合的唯一标识符,POM 继承时用到 -->
                        <id />
                        <!-- 产生报表集合时,被使用的报表的配置 -->
                        <configuration />
                        <!-- 配置是否被继承到子 POMs -->
                        <inherited />
                        <!-- 这个集合里使用到哪些报表 -->
                        <reports />
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
    <!-- 继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述 group ID 和 --> 
        ID 信息),如果 group ID 和 artifact ID 以外的一些信息没有描述,则通过 group ID 和 artifact ID 匹配到这里的依赖,并使用这里的依赖信息。 -->
    <dependencyManagement>
        <dependencies>
            <!-- 参见 dependencies/dependency 元素 -->
            <dependency>
                ......
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。 -->
    <distributionManagement>
        <!--部署项目产生的构件到远程仓库需要的信息 -->
        <repository>
            <!--是分配给快照一个唯一的版本号(由时间戳和构建流水号)?还是每次都使用相同的版本号?参见repositories/repository元素 -->
            <uniqueVersion />
            <id>banseon-maven2</id>
            <name>banseon maven2</name>
            <url>file://${basedir}/target/deploy</url>
            <layout />
        </repository>
        <!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库,参见distributionManagement/repository元素 -->
        <snapshotRepository>
            <uniqueVersion />
            <id>banseon-maven2</id>
            <name>Banseon-maven2 Snapshot Repository</name>
            <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
            <layout />
        </snapshotRepository>
        <!--部署项目的网站需要的信息 -->
        <site>
            <!--部署位置的唯一标识符,用来匹配站点和settings.xml文件里的配置 -->
            <id>banseon-site</id>
            <!--部署位置的名称 -->
            <name>business api website</name>
            <!--部署位置的URL,按protocol://hostname/path形式 -->
            <url>
                scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web
            </url>
        </site>
        <!-- URL لصفحة تحميل المشروع. إذا لم يكن هناك هذا العنصر، يجب على المستخدم الرجوع إلى الصفحة الرئيسية. السبب في استخدام هذا العنصر هو: مساعدة في تحديد العناصر التي ليست في المستودع (نتيجة للعقود). -->
        <downloadUrl />
        <!-- إذا حصل العنصر على ID جديد للفئة وID جديد للعنصر (تم نقل العنصر إلى موقع جديد)، يتم سرد معلومات إعادة التوجيه هنا. -->
        <relocation>
            <!-- ID جديد للفئة. -->
            <groupId />
            <!-- ID جديد للعنصر. -->
            <artifactId />
            <!-- رقم إصدار العنصر الجديد. -->
            <version />
            <!-- يظهر للمستخدم معلومات إضافية حول التحرك، مثل السبب. -->
            <message />
        </relocation>
        <!-- يوضح حالة العنصر في المستودع البعيد. لا يجب تعيين هذا العنصر في المشروع المحلي، لأنه يتم تحديثه تلقائيًا بواسطة الأدوات. القيم الصالحة هي: none (الافتراضي)،converted (يتم تحويله من قبل مدير المستودع)، 
            Maven 1 POM (تم تحويله)،partner (تم استيراده مباشرة من مستودع Maven 2 الشريك)،deployed (تم توزيعه من ملفات مثال Maven 2)،verified (تم التحقق منه كصحيح وأخير). -->
        <status />
    </distributionManagement>
    <!-- استبدل الاسم بالقيمة، يمكن استخدام Properties في جميع أنحاء POM، أو كشروط إشعال (انظر شرح عن عنصر activation في ملف تكوين settings.xml). النمط هو <name>value</name>. -->
    </properties />
</project>