Все о 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
main
java
resources
test
java
resources
В src/main/java создадим пакет, в котором будем работать. Чтобы составить его правильно, хорошо бы поставить в начало название организации (groupId), а потом имя проекта. В нашем случае это будет так:
com.github.javarushcommunity.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.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:Для нашего теста возьмем из тестовых картинок image-comparison и положим их в тестовые ресурсы (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:Теперь нажмем 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/javarushcommunity/maven-demo/1.0-SNAPSHOT
И если мы зайдем в терминал и попытаемся попасть в папку, где находится архив, то он будет там лежать:deploy нам показать не выйдет, а другие пока вам не нужны…Полезные ссылки: |
---|
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ