JavaRush /مدونة جافا /Random-AR /كل ما تريد معرفته عن مافن. (الجزء الثاني) - "مشروع جافا م...
Roman Beekeeper
مستوى

كل ما تريد معرفته عن مافن. (الجزء الثاني) - "مشروع جافا من الألف إلى الياء"

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

إعداد pom.xml

أثناء قيامنا بالتنظير، حصلنا على ملف pom.xml جيد جدًا:
عرض الرمز
<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>

   <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>
       <connection>git@github.com:javarushcommunity/maven-demo.git</connection>
       <developerConnection>git@github.com:javarushcommunity/maven-demo.git</developerConnection>
       <url>https://github.com/javarushcommunity/maven-demo</url>
   </scm>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.version>
       <image.comparison.version>4.3.0</image.comparison.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>
       <javadoc.plugin.version>3.1.1</javadoc.plugin.version>
       <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>
       <dependency>
           <groupId>com.github.romankh3</groupId>
           <artifactId>image-comparison</artifactId>
           <version>${image.comparison.version}</version>
       </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>
- ولكن لكي يكون لديك شيء لتجميعه، يجب إضافته هناك! منطقي؟ - نعم نقيب. bgg لذلك، دعونا نضيف فئة تحتوي على طريقة واختبارين لها. لنقم بإنشاء مخطط مجلد عادي لـ Maven:
src موارد جافا الرئيسية اختبار موارد جافا
في src/main/java سنقوم بإنشاء حزمة سنعمل فيها. ولتأليفه بشكل صحيح، من الجيد وضع اسم المنظمة ( groupId ) في البداية، ثم اسم المشروع. في حالتنا سيكون الأمر على النحو التالي: com.github.javarushcommunity.mavendemo بالنسبة لي، هذه حزمة جيدة جدًا. سنقوم فيه بإنشاء فئة ImageComparator ، والتي سنكتب لها اختبارين.

ربط Maven والمشروع ككل بـ IDEA

لكي تتمكن الفكرة من التعرف على تبعياتنا وعرض استخدامها في المشروع، نحتاج إلى القيام بعدة أشياء:
  1. أخبر الفكرة بمكان وجود مصادر التعليمات البرمجية وأين ستكون الاختبارات.
  2. أضف مشروعًا مخضرمًا إلى الفكرة.
لتحقيق الأول، تحتاج إلى العثور على هذا الرمز: "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 2انقر عليه وانتقل إلى قسم الوحدات . بعد ذلك، تحتاج إلى إعطاء المجلدات التي تم إنشاؤها العلامة المطلوبة، كما هو موضح في الشكل أدناه: "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 3أي:
  • src/main/java - المصادر
  • src/main/resources - الموارد
  • src/test/java - الاختبارات
  • src/test/resources - اختبار الموارد
  • الهدف - مستبعد
يمكن العثور على كل هذه المصادر والموارد والاختبار وموارد الاختبار والمستبعدة على السطر الذي تم كتابة علامة باسم عليه . حدد مجلدًا وقم بتسميته وفقًا لذلك. والخطوة الثانية هي إضافة المشروع المخضرم إلى IDEA حتى يتمكن من العمل بسحره. للقيام بذلك، تحتاج إلى العثور على ملف pom.xml في IDEA والنقر بزر الماوس الأيمن لتحديد Add as Maven Project . وهذا كل شيء، ستكون سعيدًا (: بعد ذلك، "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 4ستظهر لوحة Maven على اليمين ، والتي يمكنك فتحها وتشغيل أوامر Maven فيها."مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 5

نكتب المصادر والاختبارات لـ "مشروعنا"

لذا، أضفنا Maven إلى الفكرة، والآن دعنا نصف الفئة التي ستكون بمثابة مصادر لنا:

مقارنة الصور:

package com.github.javarushcommunity.mavendemo;

import com.github.romankh3.image.comparison.ImageComparison;
import com.github.romankh3.image.comparison.model.ImageComparisonResult;
import com.github.romankh3.image.comparison.model.ImageComparisonState;

import java.awt.image.BufferedImage;

/**
* Class created for answering, does two images the same or not.
*/
public class ImageComparator {

   /**
    * Method, which says the same images or not.
    *
    * @param image1 image1 for comparison
    * @param image2 image2 for comparison
    * @return return true, if images are the same, false - otherwise.
    */
   public boolean isTheSameImages(BufferedImage image1, BufferedImage image2) {
       //Create ImageComparison object
       ImageComparison imageComparison = new ImageComparison(image1, image2);

       //Compare images
       ImageComparisonResult imageComparisonResult = imageComparison.compareImages();

       //Check, that ImageComparisonState is MATCH:
       return ImageComparisonState.MATCH == imageComparisonResult.getImageComparisonState();
   }
}
دعونا إنشاء اختبارات لهذا الغرض. يجب أن تكون الفئة التي يتم اختبارها في نفس الحزمة، فقط في src/test/java. الفكرة تعرف ذلك، ويمكنك الاستفادة من إمكانياتها. للقيام بذلك، انقر فوق اسم الفصل في الملف نفسه، وحدد إنشاء اختبار على المصباح الكهربائي الذي يظهر: "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 6سيُطلب منا تحديد الإعدادات للاختبار المستقبلي. لا نقوم بتثبيت أي شيء، فقط انقر فوق "موافق": "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 7بالنسبة للاختبار، سنأخذ مقارنة الصور من صور الاختبار ونضعها في موارد الاختبار (src/test/resource). بعد هذا سنكتب اختبارين. سوف يتحقق المرء من أن هاتين الصورتين مختلفتان. وفي الأخرى سننقل نفس الصورة وننتظر الجواب بأنهما متماثلان. ومن ثم نحصل على الاختبار التالي:
package com.github.javarushcommunity.mavendemo;

import com.github.romankh3.image.comparison.ImageComparisonUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.awt.image.BufferedImage;

@DisplayName("Unit-level testing for ImageComparator")
class ImageComparatorTest {

   private final ImageComparator comparator = new ImageComparator();

   @Test
   public void shouldConfirmImagesNotTheSame() {
       //given
       BufferedImage image1 = ImageComparisonUtil.readImageFromResources("image1.png");
       BufferedImage image2 = ImageComparisonUtil.readImageFromResources("image2.png");

       //when
       boolean theSameImages = comparator.isTheSameImages(image1, image2);

       //then
       Assertions.assertFalse(theSameImages);
   }

   @Test
   public void shouldConfirmImagesTheSame() {
       //given
       BufferedImage image1 = ImageComparisonUtil.readImageFromResources("image1.png");

       //when
       boolean theSameImages = comparator.isTheSameImages(image1, image1);

       //then
       Assertions.assertTrue(theSameImages);
   }
}
الاختبارات بسيطة جدًا، ولن أخوض فيها. إذا كنت مهتمًا، سأكتب مقالًا عن الاختبار يومًا ما (اكتب عنه في التعليقات).

تنفيذ أوامر مافن

الآن، عندما يكون كل شيء جاهزًا لرؤية عمل الفرق، حدد مشروعنا في البرنامج الإضافي Maven وافتح Lifecycle فيه : "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 8الآن انقر فوق "ترجمة" وشاهد ما حدث: "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 9من هذا يمكننا استخلاص استنتاجين:
  1. تم تجميع مصادرنا ووضعها في المسار المحدد.
  2. كان الأمر ناجحًا - بناء النجاح.
وفي الواقع، إذا ذهبنا إلى بنية المشروع ونظرنا إلى ما تغير هناك، فسنرى أنه تمت إضافة المجلد الهدف ، والذي لا يزال بإمكاننا استكشافه والعثور على فئة ImageComparator المترجمة : "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 10الآن أود أن أبدأ حزمة جديدة الأمر من الصفر. للقيام بذلك، لنقم بتشغيل الأمر النظيف (انقر مرتين) : "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 11نتيجة لذلك، قيل لنا أننا قمنا بحذف المجلد الهدف ، الذي يحتوي على كل ما تم إنشاؤه بعد أمر الترجمة . لنجري اختبار الأمر : "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 12تشغيل الاختبارات: 0... لكننا كتبنا ما يصل إلى اثنين. وهذا هو، لسبب ما لم يتم إجراء الاختبارات. الترميز المباشر يشبه ذلك، دعنا نذهب إلى الويب) بعد 5 دقائق من البحث على Google، وجدت أنه باستخدام JUnit5 تحتاج إلى إضافة مكون إضافي آخر:
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
دعونا نضيفه إلى المشروع، ونضع الإصدار في <properties/> بأفضل ما نستطيع ونعيد تشغيل الاختبار : "مشروع Java من الألف إلى الياء": كل ما تريد معرفته عن Maven.  الجزء 2 - 13الآن الأمر مختلف! تم إجراء اختبارين وكانا ناجحين. نار! الآن نقوم بتشغيل الحزمة الخاصة بنا ونتوقع أننا سنجد الجرنيك في المجلد الهدف : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14أي أننا نرى مرة أخرى أن الاختبارات قد مرت، وبعد هذا (نضمن أن كل شيء في المشروع جيد) يمكننا جمع المشروع في ملف أرشيف. يوضح الشكل وجود أرشيف في سجلات الإطلاق المخضرم وبنية المشروع. التالي لدينا تثبيت . فريق عظيم. أوه، قبل أن أنسى. يعتبر تنظيف المشروع قبل تنفيذ أمر جديد عن طريق تشغيل نظيف ممارسة جيدة . سيوفر لك هذا من الهراء في المستقبل - أنا أضمن ذلك من تجربتي الخاصة))) لذلك، نقوم أولاً بتشغيل نظيف ، ثم قم بالتثبيت : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15حيث يوجد السهم، يمكنك أن ترى بوضوح مكان وجود المستودع المحلي. بناءً على ما يكتبونه، هذا في طريقي: /Users/roman_beskrovnyi/.m2 وسيكون الأرشيف نفسه موجودًا هنا: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- لقطة وإذا ذهبنا إلى المحطة وحاولنا الدخول إلى المجلد الذي يوجد به الأرشيف، فسيكون هناك: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16لن يُظهر لنا النشر، ولن تحتاج إلى المجلدات الأخرى بعد...

بدلا من الإخراج

لقد تعرفنا اليوم بسرعة على ماهية Maven، وما لديها، وما هي الأوامر الرئيسية الموجودة هناك. حاولت أن أنقل هذا ببساطة وبأمثلة. كل التعليمات البرمجية المصدر للمثال موجودة في مؤسسة JavaRush Community على GitHub في مشروع maven-demo . اكتب جميع الأسئلة في التعليقات. كالعادة، أقترح عليك الاشتراك في حسابي على Github حتى لا يفوتك الكود الجديد لمشروع JRTB الخاص بنا. ومرة أخرى، فهو لم يمت. لقد كان ببساطة في حالة ركود))

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

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