JavaRush /مدونة جافا /Random-AR /كل ما تريد معرفته عن Maven - "مشروع Java من الألف إلى الي...
Roman Beekeeper
مستوى

كل ما تريد معرفته عن Maven - "مشروع Java من الألف إلى الياء"

نشرت في المجموعة
مرحبا بالجميع أيها الأصدقاء الأعزاء. أود أن أعتذر على الفور: أتذكر أنني وعدت بأن أكتب مقالاً مرة واحدة في الأسبوع. لم ينجح في مبتغاه. لم أتمكن من الجلوس والكتابة بشكل صحيح، لكنني لا أريد أن أفعل ذلك بهذه الطريقة أو تلك. لن أتذمر من الأسباب، لأنني لست بحاجة إليها، وأنت بالتأكيد لست مهتمًا. المشروع لم يمت، بل كان في حالة ركود :) نواصل! ومواد اليوم مخصصة لـ Maven. "مشروع جافا من الألف إلى الياء": كل ما تريد معرفته عن Maven - 1

دعونا نتحدث عن مافن

أولا تحتاج إلى تثبيته. بالطبع، نظرًا لأن لدي جهاز Mac، فلا يمكنني عرض التثبيت إلا لجهاز Mac. إنه مجرد حظ سيء. لقد قمت بتثبيته منذ فترة طويلة، لذا سيتعين عليك القيام بذلك بنفسك :)
تعليمات تثبيت Maven موجودة في هذه المادة .

لماذا نحتاج مافن؟

Maven هي أداة لبناء المشاريع، إلى جانب Gradle وAnt. فقط لأنني سأستخدمه في JRTB (JavaRush Telegram Bot)، أريد أن أقدم لك آخر المستجدات. في الوقت الحاضر، لا يتم إنشاء أي مشروع بدون نظام التجميع، لأنه يبسط حياتنا عدة مرات. هذا يسمح:
  • • سحب كافة المكتبات اللازمة (من حيث أدوات التجميع - التبعيات (أي التبعيات))؛
  • • تحديد بالضبط كيف يجب تجميع المشروع وإلى ماذا (على سبيل المثال، هل نريد بناء WAR أو JAR أو JAR القابل للتنفيذ)؛
  • • تعيين نسخة المشروع في مكان واحد بحيث تتم الإشارة إليه أثناء التجميع.
  • • وصف المشروع ودورة حياته.
  • • إضافة ما يسمى بالإضافات (النسخة التقليدية من الكلمة الإنجليزية Plugin)؛
  • • نشر المكتبات في مستودع مشترك حتى تتمكن المشاريع الأخرى من سحبها إلى أعلى على أنها تبعيات.
بشكل عام، يفعل الكثير من الأشياء، وكلها مفيدة. سأقول هذا: بالنسبة للمهندسين المبتدئين، ليس من الضروري معرفة جميع الوظائف من الغلاف إلى الغلاف. هنا، كما هو الحال مع git، من المهم فهم الأساسيات والمفاهيم العامة. هذا ما سنفعله بالنسبة لنا، يبدأ Maven بملف XML في جذر مشروعنا يسمى pom.xml . سنفعل كل شيء عمليًا، لذا سنقوم أولاً بإنشاء مشروعنا الأول في مجتمع JavaRush. للقيام بكل شيء بحكمة، سأستخدم قالبًا للمستودع ، حيث تم بالفعل تكوين الأشياء الأساسية التي وصفتها مرة واحدة على JR . للإنشاء، انتقل إلى المستودع الذي يحتوي على القالب وانقر فوق الزر "استخدام هذا القالب" : "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven - 2ونتيجة لذلك، لدينا أول مستودع في مجتمعنا :) نقوم بتنزيل المشروع محليًا. للقيام بذلك، من خلال الفكرة، انتقل إلى ملف -> جديد -> المشروع من التحكم في الإصدار . في النافذة التي تظهر، أدخل رابط المشروع على Github (ستكون النتيجة أفضل إذا قام كل شخص بإنشاء نفس المشروع بشكل منفصل واتبع جميع الخطوات معي): "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven - 3انقر فوق Clone ، وسيتم استنساخ المشروع .

pom.xml هو رأس كل شيء

كل ما تحتاجه موجود في pom.xml. جميع المعلومات حول المشروع ومطوره والمستودع البعيد الذي يتم تخزين المشروع عليه. في البداية، نحن مهتمون بالكتل التالية: <project/> - هذه هي الكتلة الرئيسية التي تحتوي على جميع المعلومات حول المشروع. جميع الآخرين سيكونون فيه بشكل صريح أو متعدٍ. داخل العلامة الافتتاحية يقول شيئًا مثل هذا:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                     http://maven.apache.org/xsd/maven-4.0.0.xsd">
وفوق كل شيء آخر، يتم كتابة السطر التالي أيضًا في جميع pomniks (من المفترض أن تكون اللغة العامية من pom.xml :)).
<modelVersion>4.0.0</modelVersion>
ولكن بعد ذلك يصبح الأمر أكثر إثارة للاهتمام: سنصف كيف نحدد المشروع الذي يصفه نصبنا التذكاري. باستخدام مكتبتي كمثال، سأصفها، ثم سنضيفها إلى ذاكرتنا، إلى المشروع الذي تم إنشاؤه حديثًا:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
الشيء الرئيسي هنا:
  • معرف المجموعة هو معرف مؤسسة التطوير أو المهندس الفردي. عادةً ما يكون هذا هو المجال بترتيب عكسي. على سبيل المثال، تم وصف حساب romankh3 على Github هنا. انها مهمة جدا. لنفترض أن نظام الربيع البيئي هو com.springframework . بهذه الطريقة يمكنك تمييز المشروع الأصلي عن شوكة شخص آخر أو ببساطة عن طريق مصادفة اسم المشروع.
  • artifaceId هو بالفعل اسم مشروع محدد موصوف في هذه الذاكرة.
  • الإصدار — إصدار هذا المشروع. كل شيء هنا واضح كالنهار: تمت إضافة وظائف جديدة، أو إصلاح الوظائف القديمة، أو إعادة البناء أو إجراء بعض التغييرات الأخرى - زيادة الإصدار.
  • التغليف - نصف هنا كيف ينبغي لـ Maven تجميع مشروعنا. إما في جرة، أو في الحرب، أو غيرهما .
  • الاسم - هنا اسم أكثر إرضاءً للمشروع.
لا تزال هناك بعض الأشياء التي لا يلزم ملؤها على الإطلاق - ستعمل Maven بدونها - ولكن إذا كنت بحاجة إلى نشر المكتبة للاستخدام العام، فمن المؤكد أنها تستحق إضافتها. ما هي هذه الأشياء؟
  • • المسار إلى مستودع المشروع، حيث يمكن تنزيله

    <url>https://romankh3.github.io/image-comparison/</url>

  • • الرخصة التي يتم بموجبها توزيع هذا المشروع. علاوة على ذلك، قد يكون هناك أكثر من واحد، وبالتالي تحتاج إلى ضبطه بهذه الطريقة:

    <licenses>
     <license>
       <name>The Apache Software License, Version 2.0</name>
       <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
     </license>
    </licenses>

  • • معلومات حول المطورين الذين قاموا بإنشاء/إنشاء المشروع:

    <developers>
     <developer>
       <id>romankh3</id>
       <name>Roman Beskrovnyi</name>
       <email>roman.beskrovnyy@gmail.com</email>
     </developer>
    </developers>

  • • كتلة scm، والتي تصف كيفية الوصول إلى المشروع:

    <scm>
    <connection>git@github.com:romankh3/image-comparison.git</connection>
    <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection>
     <url>https://github.com/romankh3/image-comparison</url>
    </scm>

بعد أن وصفنا المعلومات العامة، يمكننا إضافة كتلة ذات تبعيات:
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>2.26.0</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>5.5.2</version>
       <scope>test</scope>
   </dependency>
<dependency>
   	<groupId>com.github.romankh3</groupId>
   	<artifactId>image-comparison</artifactId>
   	<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
أضفت هنا مكتبتين للاختبار: هناك حاجة إليهما دائمًا. كما لاحظت بالفعل، فإن التبعيات لها نطاق - نطاق. في حالتنا ، تم تحديد الاختبار ، مما يعني أننا ببساطة لن نرى هذه التبعية في الكود الرئيسي. بعد ذلك، لجعل كل شيء يبدو جميلًا، يمكنك استخدام علامة منفصلة لعرض إصدارات <properties/> :
<properties>
   <mockito.version>2.26.0</mockito.version>
   <junit.version>5.5.2</junit.version>
   <image.comparison.version>4.3.0</image.comparison.version>
</properties>
لذلك يمكن تحديث كتلة التبعية باستخدام البنية ${PROPERTY_NAME} :
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>${mockito.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>${junit.version}</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>com.github.romankh3</groupId>
       <artifactId>image-comparison</artifactId>
       <version>${image.comparison.version}</version>
       <scope>test</scope>
   </dependency>
</dependencies>
بعد ذلك تأتي كتلة <build/> كبيرة ، والتي تحتوي على كتلة <plugins/> مهمة ، والتي يمكنك من خلالها تخصيص عملية البناء. يمكنك إضافة مكون إضافي واحد أو أكثر داخل كتلة <plugins/> ، كما يلي:
<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-source-plugin</artifactId>
           <version>3.2.0</version>
           <executions>
               <execution>
                   <id>attach-sources</id>
                   <goals>
                       <goal>jar</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>
هنا يمكنك أن ترى أنني أضفت مكونين إضافيين - maven-source-plugin و maven-javadoc-plugin . يحتوي كل مكون إضافي على إعدادات وسمات (معلمات) يمكن ضبطها، وبالتالي تخصيص المكونات الإضافية. سيكون هذا مثيرًا للاهتمام بالنسبة لنا في المستقبل. في الوقت الحالي، دعونا نتذكر ونمضي قدمًا. بنفس الطريقة كما هو الحال مع التبعيات، سنضع إصدارات البرنامج المساعد في <properties/> . وبناء على ذلك يمكنك إنشاء الذاكرة التالية:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0"
        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.github.javarushcommunity</groupId>
   <artifactId>maven-demo</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>Maven Demo Project</name>

   <url>https://github.com/javarushcommunity/maven-demo/</url>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.version>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <source.plugin.version>3.2.0</source.plugin.version>
   </properties>

   <dependencies>
       <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
           <version>${mockito.version}</version>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.junit.jupiter</groupId>
           <artifactId>junit-jupiter-api</artifactId>
           <version>${junit.version}</version>
           <scope>test</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-source-plugin</artifactId>
               <version>${source.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-sources</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-javadoc-plugin</artifactId>
               <version>${javadoc.plugin.version}</version>
               <executions>
                   <execution>
                       <id>attach-javadocs</id>
                       <goals>
                           <goal>jar</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
       </plugins>
   </build>
</project>

دورة حياة مافن

يمتلك Maven شيئًا مثل دورة حياة maven. تجدر الإشارة إلى أن هذه مجموعة من المهام التي يمكن للمخضرم القيام بها. قد تكون هناك مهام أخرى إلى جانب دورة حياة المخضرم. عن ماذا يتكلم؟ هناك مجموعة من الأوامر التي يمكنك من خلالها تجميع المشروع ( إنشاء ... مرة أخرى، بالطبع، ورقة بحث من اللغة الإنجليزية، ولكن بدونها لا يوجد مكان)، وحذف التصميمات التي جمعها Maven، وتثبيتها في Maven المحلي حتى تتمكن من ذلك سحب المشروع محليًا باعتباره تبعية، وما إلى ذلك. الآن دعونا نتحدث عن كل شيء بمزيد من التفصيل. قبل أن أكتب رأيي في هذه الفرق، قررت أن أقرأ ما يكتبونه على الإنترنت حول هذا الأمر.. وأدركت أنه من الصعب جدًا وصفه. للعمل، للعمل الأولي، نحتاج إلى عدة أوامر . دعونا نصفهم:
  • تجميع — تجميع المشروع. هذه هي المرحلة الأولى: يمكنك خلالها معرفة ما إذا كانت هناك أية أخطاء في الترجمة في المشروع. في بعض الأحيان تكون هناك قفزات مختلفة في العمل في IDEA، ولهذا السبب تظهر مشاكل الترجمة حيث لا ينبغي أن تكون موجودة. لذا فإن هذا الأمر سوف ينشر كل حرف i.
  • اختبار - يقوم بتشغيل جميع الاختبارات التي يتم إجراؤها على JUnit وتقع في المكان الذي يتوقعه Maven ( src/test/java هو قائدك).
  • package هو الأمر التالي، والذي يتضمن الأمرين السابقين: أي أنه يتم تشغيل أمر الترجمة داخله أولاً، ثم يتم إرسال أمر الاختبار إلى المشروع المترجم ، وإذا كان كل شيء على ما يرام هنا، يبدأ إنشاء الأرشيف (الأرشيف الذي نختاره في <package/>))
  • التثبيت - عندما نقوم بتثبيت Maven على جهاز، يكون لدينا مستودع Git محلي يقوم بتخزين المكتبات التي نقوم بتنزيلها للمشاريع. لكن جمال Maven هو أنه يمكننا استخدام أمر التثبيت لإضافة مشروعنا إلى مستودع Git المحلي واستخدام مشروعنا محليًا باعتباره تبعية. لا تصدقني؟ جربه :) بهذه الطريقة يمكنك أن ترى بسرعة كيف سيبدو مشروعك وكأنه يعتمد على مشروع آخر.
  • النشر هو تاج كل ما سبق . أمر يمنح القدرة على إضافة مشروع ليس فقط إلى مستودع محلي كتثبيت، ولكن أيضًا إلى مستودع بعيد، حيث يمكن لأي شخص لديه حق الوصول إليه استخدامه كتبعية.
  • التحقق - أمر يتحقق من كل شيء ويحدد ما إذا كان المشروع جاهزًا للنشر.
  • نظيف - بالطبع، يجب تخزين الملفات والأرشيف المجمع في مكان ما. لدى Maven مجلد مستهدف لهذا الغرض . وهذه بيانات لا يحتاجها المشروع. وقبل إعادة تجميع المشروع، سيكون من الجيد حذف كل ما جاء من قبل. هذا هو الغرض من الأمر النظيف .

الإضافات مخضرم

أردت أن أتحدث أكثر عن المكونات الإضافية، ولكن المقالة طويلة بالفعل. سيكون هذا واجبك المنزلي. فهم ما هو وكيفية استخدامه. في استمرار المقال سنتعامل مع Maven عمليًا.

توجد قائمة بجميع المواد الموجودة في السلسلة في بداية هذه المقالة.

تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION