Все про 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.codegymcommunity</groupId>
<artifactId>maven-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Maven Demo Project</name>
<url>https://github.com/codegymcommunity/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:codegymcommunity/maven-demo.git</connection>
<developerConnection>git@github.com:codegymcommunity/maven-demo.git</developerConnection>
<url>https://github.com/codegymcommunity/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 main java resources test java resources
У src/main/java створимо пакет, у якому працюватимемо. Щоб скласти його правильно, добре було б поставити на початок назву організації ( groupId ), а потім ім'я проекту. У нашому випадку це буде так: com.github.codegymcommunity.mavendemo Як на мене, то дуже непоганий пакет. У ньому створимо клас ImageComparator , до якого напишемо два тести.
Підключаємо Мавен та проект загалом до IDEA
Щоб ідея змогла розпізнати наші залежності та запропонувати їх використати у проекті, потрібно зробити кілька речей:- Сказати ідеї, де будуть вихідні коди, а де будуть тести.
- Додати проект в ідею.
- • src/main/java — Sources
- • src/main/resources — Resources
- • src/test/java — Tests
- • src/test/resources — Test Resources
- • target — Excluded
Пишемо вихідники та тести до нашого “проекту”
Так, мавен в ідею додали, тепер опишемо клас, який виступатиме для нас у ролі вихідників:ImageComparator:
package com.github.codegymcommunity.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: Для нашого тесту візьмемо із тестових картинок image-comparison і покладемо їх у тестові ресурси (src/test/resource). Після цього напишемо два тести. Один перевірятиме, що ці дві картинки різні. А в інший передамо однакову картинку і чекатимемо відповідь, що вони однакові. Після отримаємо такий тест:
package com.github.codegymcommunity.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 : Тепер натиснемо compile і подивимося, що вийшло: З цього можна зробити два висновки:- Скомпілювалися наші вихідники та помістабо їх у вказаний шлях.
- Команда пройшла успішно – BUILD SUCCESS.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
Додамо його в проект, винесемо версію <properties/> як вміємо і перезапустимо test : Ось тепер інша справа! Два тести запустабося та пройшли успішно. Вогонь! Тепер запускаємо наш package і очікуємо, що знайдемо джарник у target папці: Тобто ми бачимо знову, що тести пройшли, і після цього (гарантії, що все у проекті добре) ми можемо збирати проект до архіву. На малюнку видно, що у логах запуску мавену та структурі проекту архів є. Наступний у нас install . Чудова команда. О, доки не забув. Хорошим тоном вважається перед виконанням нової команди почистити проект, виконавши clean. Це позбавить дурниць у майбутньому - гарантую за своїм досвідом))) Тому спочатку запускаємо clean , а потім вже install : Там, де стрілочка, добре видно, де знаходиться локальний репозиторій. Виходячи з того, що пишуть, у мене це на шляху: /Users/roman_beskrovnyi/.m2 А сам архів буде тут: /Users/roman_beskrovnyi/.m2/repository/com/github/codegymcommunity/maven-demo/1.0-SNAPSHOT І якщо ми зайдемо в термінал і спробуємо потрапити до папки, де знаходиться архів, він там лежатиме: deploy нам показати не вийде, а інші поки вам не потрібні…
Корисні посилання: |
---|
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ