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์๋ง ์์ด์ผ ํฉ๋๋ค. ์์ด๋์ด๋ ์ด๋ฅผ ์๊ณ ์์ผ๋ฏ๋ก ๊ทธ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํ์ผ ์์ฒด์์ ํด๋์ค ์ด๋ฆ์ ํด๋ฆญํ๊ณ ๋ํ๋๋ ์ ๊ตฌ์์ ํ
์คํธ ๋ง๋ค๊ธฐ๋ฅผ ์ ํํฉ๋๋ค. ํฅํ ํ
์คํธ์ ๋ํ ์ค์ ์ ์ ํํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์๋ฌด ๊ฒ๋ ์ค์นํ์ง ์๊ณ ํ์ธ์ ํด๋ฆญํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ํ
์คํธ๋ฅผ ์ํด ํ
์คํธ ์ด๋ฏธ์ง์์ ์ด๋ฏธ์ง ๋น๊ต๋ฅผ ๊ฐ์ ธ์ ํ
์คํธ ๋ฆฌ์์ค(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 ์คํ ๋ก๊ทธ์ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์์นด์ด๋ธ๊ฐ ์์์ ๋ณด์ฌ์ค๋๋ค. ๋ค์์ผ๋ก install ๊ฐ ์์ต๋๋ค . ํ๋ฅญํ ํ. ์, ์์ด๋ฒ๋ฆฌ๊ธฐ ์ ์. clean ์ ์คํํ์ฌ ์ ๋ช
๋ น์ ์คํํ๊ธฐ ์ ์ ํ๋ก์ ํธ๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค . ์ด๊ฒ์ ๋ฏธ๋์ ๋ง๋ ์๋๋ ์ผ๋ก๋ถํฐ ๋น์ ์ ๊ตฌํ ๊ฒ์
๋๋ค - ๋๋ ๋ด ์์ ์ ๊ฒฝํ์ ํตํด ๊ทธ๊ฒ์ ๋ณด์ฅํฉ๋๋ค))) ๋ฐ๋ผ์ ๋จผ์ clean ์ ์คํ ํ ๋ค์ ์ค์นํฉ๋๋ค . ํ์ดํ๊ฐ ์๋ ๊ณณ์ ๋ก์ปฌ ์ ์ฅ์๊ฐ ์๋ ์์น๋ฅผ ๋ช
ํํ๊ฒ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ค์ด ์์ฑํ ๋ด์ฉ์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ ๋ด ๋ฐฉ์์
๋๋ค : /Users/roman_beskrovnyi/.m2 ๊ทธ๋ฆฌ๊ณ ์์นด์ด๋ธ ์์ฒด๋ ์ฌ๊ธฐ์ ์์นํฉ๋๋ค : /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT ๊ทธ๋ฆฌ๊ณ ํฐ๋ฏธ๋๋ก ๊ฐ์ ์์นด์ด๋ธ๊ฐ ์๋ ํด๋์ ๋ค์ด๊ฐ๋ ค๊ณ ํ๋ฉด ๊ฑฐ๊ธฐ์ ์์ ๊ฒ์
๋๋ค. ๋ฐฐํฌ๋ ์ฐ๋ฆฌ์๊ฒ ํ์๋์ง ์์ผ๋ฉฐ ์์ง ๋ค๋ฅธ ์์นด์ด๋ธ๋ ํ์ํ์ง ์์ต๋๋ค...
GO TO FULL VERSION