English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
أدوات الإنترنت
اكتشاف الاعتماد المتبادل
هناك حالة شائعة جدًا، على سبيل المثال، اعتماد 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 يحقق هذا التفصيل باستخدام ميكانيكية الاعتمادات القابلة للتنقل.