كل شيء عن Maven: البداية التي أحب ممارستها. لا يمكنك حتى أن تتخيل مدى صعوبة الكتابة عن النظرية في بعض الأحيان. ومع ذلك، لا يمكنك الذهاب إلى أي مكان بدونها. الممارسة أمر آخر بالطبع. الآن دعنا ننتقل بسرعة إلى الأوامر التي وصفتها سابقًا وسننتهي)
- ولكن لكي يكون لديك شيء لتجميعه، يجب إضافته هناك! منطقي؟ - نعم نقيب. bgg لذلك، دعونا نضيف فئة تحتوي على طريقة واختبارين لها. لنقم بإنشاء مخطط مجلد عادي لـ Maven:
إعداد 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>
src موارد جافا الرئيسية اختبار موارد جافا
في src/main/java سنقوم بإنشاء حزمة سنعمل فيها. ولتأليفه بشكل صحيح، من الجيد وضع اسم المنظمة ( groupId ) في البداية، ثم اسم المشروع. في حالتنا سيكون الأمر على النحو التالي: com.github.javarushcommunity.mavendemo بالنسبة لي، هذه حزمة جيدة جدًا. سنقوم فيه بإنشاء فئة ImageComparator ، والتي سنكتب لها اختبارين.
ربط Maven والمشروع ككل بـ IDEA
لكي تتمكن الفكرة من التعرف على تبعياتنا وعرض استخدامها في المشروع، نحتاج إلى القيام بعدة أشياء:- أخبر الفكرة بمكان وجود مصادر التعليمات البرمجية وأين ستكون الاختبارات.
- أضف مشروعًا مخضرمًا إلى الفكرة.
- • src/main/java - المصادر
- • src/main/resources - الموارد
- • src/test/java - الاختبارات
- • src/test/resources - اختبار الموارد
- • الهدف - مستبعد
نكتب المصادر والاختبارات لـ "مشروعنا"
لذا، أضفنا 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. الفكرة تعرف ذلك، ويمكنك الاستفادة من إمكانياتها. للقيام بذلك، انقر فوق اسم الفصل في الملف نفسه، وحدد إنشاء اختبار على المصباح الكهربائي الذي يظهر: سيُطلب منا تحديد الإعدادات للاختبار المستقبلي. لا نقوم بتثبيت أي شيء، فقط انقر فوق "موافق": بالنسبة للاختبار، سنأخذ مقارنة الصور من صور الاختبار ونضعها في موارد الاختبار (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 فيه : الآن انقر فوق "ترجمة" وشاهد ما حدث: من هذا يمكننا استخلاص استنتاجين:- تم تجميع مصادرنا ووضعها في المسار المحدد.
- كان الأمر ناجحًا - بناء النجاح.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
دعونا نضيفه إلى المشروع، ونضع الإصدار في <properties/> بأفضل ما نستطيع ونعيد تشغيل الاختبار : الآن الأمر مختلف! تم إجراء اختبارين وكانا ناجحين. نار! الآن نقوم بتشغيل الحزمة الخاصة بنا ونتوقع أننا سنجد الجرنيك في المجلد الهدف : أي أننا نرى مرة أخرى أن الاختبارات قد مرت، وبعد هذا (نضمن أن كل شيء في المشروع جيد) يمكننا جمع المشروع في ملف أرشيف. يوضح الشكل وجود أرشيف في سجلات الإطلاق المخضرم وبنية المشروع. التالي لدينا تثبيت . فريق عظيم. أوه، قبل أن أنسى. يعتبر تنظيف المشروع قبل تنفيذ أمر جديد عن طريق تشغيل نظيف ممارسة جيدة . سيوفر لك هذا من الهراء في المستقبل - أنا أضمن ذلك من تجربتي الخاصة))) لذلك، نقوم أولاً بتشغيل نظيف ، ثم قم بالتثبيت : حيث يوجد السهم، يمكنك أن ترى بوضوح مكان وجود المستودع المحلي. بناءً على ما يكتبونه، هذا في طريقي: /Users/roman_beskrovnyi/.m2 وسيكون الأرشيف نفسه موجودًا هنا: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- لقطة وإذا ذهبنا إلى المحطة وحاولنا الدخول إلى المجلد الذي يوجد به الأرشيف، فسيكون هناك: لن يُظهر لنا النشر، ولن تحتاج إلى المجلدات الأخرى بعد...
GO TO FULL VERSION