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

إدارة الاعتمادات باستخدام Maven

أدوات الإنترنت

ميزة رئيسية لمaven هي إدارة الاعتمادات. عندما نتعامل مع مشاريع متعددة الأجزاء (تتضمن مئات أو آلاف من الأجزاء أو المشاريع الفرعية)، فإن علاقات الاعتماد بين الأجزاء تصبح معقدة جدًا، مما يجعل الإدارة صعبة. في هذه الحالة، يقدم Maven طريقة تحكم عالية.

اكتشاف الاعتماد المتبادل

هناك حالة شائعة جدًا، على سبيل المثال، اعتماد A على مكتبة أخرى B. إذا كان مشروع آخر C يريد استخدام A، فإن مشروع C يجب أن يستخدم مكتبة B أيضًا.

Maven يمكن أن يمنع البحث عن جميع الحاجيات المكتبية. Maven عن طريق قراءة ملف المشروع (pom.xml)، يجد العلاقات الاعتمادية بين المشاريع.

نحن بحاجة فقط إلى تحديد العلاقات الاعتمادية المباشرة في كل مشروع pom. سيساعدنا Maven في حل الأشياء الأخرى.

من خلال الاعتماد المتبادل، يمكن أن ينمو الشكل البياني للمدارات المضمنة بسرعة. عندما يحدث تكرار في المكتبات، فإن المواقف التي يمكن أن تحدث ستتزايد باستمرار. يقدم Maven بعض الوظائف لتحكم في مدى الاعتماد المتبادل.وظيفة
وصف الوظيفةتسوية الاعتمادات
依赖管理التحديد المباشر لمستوى النسخة المستخدمة يدويًا. على سبيل المثال، إذا كان مشروع C يحتوي على مشروع B في مكون إدارة الاعتمادات الخاصة به، أي أن B يعتمد على A، فإن A يمكن أن يتم تحديد النسخة التي سيتم استخدامها عند استدعاء B.
نطاق الاعتمادالاعتمادات المضمنة في كل مرحلة من مراحل عملية البناء.
استبعاد الاعتماديمكن استبعاد أي اعتماد متبادل باستخدام عنصر "exclusion". على سبيل المثال، اعتماد A يعتمد على B، واعتماد B يعتمد على C، لذلك يمكن لـ A وضع C كـ "مستبعد".
اختياري الاعتماديمكن تسمية أي اعتماد متبادل كاختياري باستخدام عنصر "optional". على سبيل المثال: اعتماد A يعتمد على B، واعتماد B يعتمد على C. لذلك، يمكن لـ B وضع C كاختياري، مما يجعل A يمكنه عدم استخدام C.

نطاق الاعتماد

اكتشاف الاعتماد المتبادل يمكن الحصول عليه من خلال استخدام النطاق التالي للاعتماد:

النطاقالوصف
مرحلة التجميعهذا النطاق يشير إلى أن الاعتماد المتبادل صالح فقط في مسار المشروع. القيمة الافتراضية.
مرحلة التزويدهذا النطاق يشير إلى أن الاعتماد المتبادل يقدم من قبل JDK في الوقت الحقيقي أو خادم الشبكة.
مرحلة التشغيلهذا النطاق يشير إلى أن الاعتماد المتبادل ليس ضروريًا في مرحلة التجميع ولكن هو ضروري في مرحلة التنفيذ.
مرحلة الاختبارهذا النطاق يشير إلى أن الاعتماد المتبادل موجود فقط في مرحلة التجميع الاختباري ومرحلة التنفيذ.
系统阶段该范围表明你需要提供一个系统路径。
导入阶段该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前项目的POM 文件的  部分定义的依赖关系可以取代某特定的 POM。

依赖管理

通常情况下,在一个共通的项目下,有一系列的项目。在这种情况下,我们可以创建一个公共依赖的 pom 文件,该 pom 包含所有的公共的依赖关系,我们称其为其他子项目 pom 的 pom 父。 接下来的一个实例可以帮助你更好的理解这个概念。

接下来是上面依赖图的详情说明:

  • App-UI-WAR 依赖于 App-Core-lib 和 App-Data-lib。

  • Root 是 App-Core-lib 和 App-Data-lib 的父项目。

  • Root 在它的依赖部分定义了 Lib1、lib2 和 Lib3 作为依赖。

App-UI-WAR 的 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>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>App-UI-WAR</artifactId>
      <version>1.0</version>
      <packaging>war</packaging>
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname</groupId>
            <artifactId>App-Core-lib</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>  
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname</groupId>
            <artifactId>App-Data-lib</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>  
</project>

App-Core-lib 的 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">
      <parent>
         <artifactId>Root</artifactId>
         <groupId>com.companyname.groupname</groupId>
         <version>1.0</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>App-Core-lib</artifactId>
      <version>1.0</version> 
      <packaging>jar</packaging>
</project>

App-Data-lib 的 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">
      <parent>
         <artifactId>Root</artifactId>
         <groupId>com.companyname.groupname</groupId>
         <version>1.0</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>App-Data-lib</artifactId>
      <version>1.0</version>   
      <packaging>jar</packaging>
</project>

Root 的 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>
      <groupId>com.companyname.groupname</groupId>
      <artifactId>Root</artifactId>
      <version>1.0</version>
      <packaging>pom</packaging>
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname1</groupId>
            <artifactId>Lib1</artifactId>
            <version>1.0</version>
         </dependency>
      </dependencies>  
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname2</groupId>
            <artifactId>Lib2</artifactId>
            <version>2.1</version>
         </dependency>
      </dependencies>  
      <dependencies>
         <dependency>
            <groupId>com.companyname.groupname3</groupId>
            <artifactId>Lib3</artifactId>
            <version>1.1</version>
         </dependency>
      </dependencies>  
</project>

الآن عندما نقوم ببناء مشروع App-UI-WAR، ستجد Maven جميع الاعتمادات من خلال استكشاف رسم الاعتمادات ويقوم ببناء هذا التطبيق.

من خلال المثال السابق، يمكننا تعلم المفاهيم الرئيسية التالية:

  • يمكن جمع الاعتمادات العامة باستخدام مفهوم pom الأب. يتم قائمة اعتمادات مشاريع App-Data-lib و App-Core-lib في المشروع الجذر (يرجى الرجوع إلى نوع الحزم الجذر، وهو POM).

  • ليس من الضروري إعلان Lib1, lib2, Lib3 كاعتمادات داخل App-UI-W. Maven يحقق هذا التفصيل باستخدام ميكانيكية الاعتمادات القابلة للتنقل.