همه چیز درباره 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
برای اینکه ایده بتواند وابستگی های ما را تشخیص دهد و پیشنهاد استفاده از آنها را در پروژه بدهد، باید چندین کار را انجام دهیم:- به ایده بگویید منابع کد کجا و تست ها کجا خواهند بود.
- یک پروژه maven را به ایده اضافه کنید.
- • 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. ایده این را می داند و شما می توانید از قابلیت های آن بهره ببرید. برای این کار روی نام کلاس در خود فایل کلیک کنید و روی لامپ ظاهر شده Create test را انتخاب کنید: از ما خواسته می شود تنظیمات را برای تست آینده انتخاب کنیم. ما هیچ چیزی را نصب نمی کنیم، فقط روی OK کلیک کنید: برای آزمایش خود، مقایسه تصاویر را از تصاویر آزمایشی می گیریم و آنها را در منابع آزمایشی (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 را اجرا کنید
حالا وقتی همه چیز برای دیدن کار تیم ها آماده شد، پروژه ما را در افزونه Maven انتخاب کنید و Lifecycle را در آن باز کنید : حالا روی کامپایل کلیک کنید و ببینید چه اتفاقی افتاده است: از اینجا می توانیم دو نتیجه بگیریم:- منابع ما جمع آوری و در مسیر مشخص شده قرار گرفتند.
- دستور موفقیت آمیز بود - BUILD SUCCESS.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
بیایید آن را به پروژه اضافه کنیم، نسخه را تا جایی که می توانیم در <properties/> قرار دهیم و تست را مجدداً راه اندازی کنیم : اکنون موضوع متفاوت است! دو تست اجرا شد و موفقیت آمیز بود. آتش! اکنون بسته خود را اجرا می کنیم و انتظار داریم که jarnik را در پوشه هدف پیدا کنیم : یعنی دوباره می بینیم که تست ها به پایان رسیده است و بعد از این (تضمین می کند که همه چیز در پروژه خوب است) می توانیم پروژه را در یک فایل جمع آوری کنیم. بایگانی. شکل نشان می دهد که یک بایگانی در لاگ های پرتاب maven و ساختار پروژه وجود دارد. بعد ما باید نصب کنیم . تیم عالی. آه، قبل از اینکه فراموش کنم تمیز کردن پروژه قبل از اجرای دستور جدید با اجرای پاک، تمرین خوبی در نظر گرفته می شود . این شما را از مزخرفات در آینده نجات می دهد - من از تجربه خودم آن را تضمین می کنم))) بنابراین، ابتدا تمیز را اجرا می کنیم و سپس نصب می کنیم : جایی که فلش است، می توانید به وضوح ببینید که مخزن محلی در کجا قرار دارد. بر اساس آنچه آنها می نویسند، این در راه است: /Users/roman_beskrovnyi/.m2 و خود آرشیو در اینجا قرار خواهد گرفت: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT و اگر ما به ترمینال برویم و سعی کنیم به پوشه ای که بایگانی در آن قرار دارد وارد شویم، در آنجا خواهد بود: deploy به ما نشان نمی دهد و شما هنوز به بقیه نیاز ندارید...
لینک های مفید: |
---|
GO TO FULL VERSION