JavaRush /Java Blog /Random-KO /Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ. (2๋ถ€) - "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€"
Roman Beekeeper
๋ ˆ๋ฒจ 35

Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ. (2๋ถ€) - "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€"

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
Maven์— ๊ด€ํ•œ ๋ชจ๋“  ๊ฒƒ: ์‹œ์ž‘์€ ๋‚ด๊ฐ€ ์—ฐ์Šตํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ๋•Œ๋กœ๋Š” ์ด๋ก ์— ๊ด€ํ•ด ๊ธ€์„ ์“ฐ๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ง€๋ฃจํ•œ ์ผ์ธ์ง€ ์ƒ์ƒ์กฐ์ฐจ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋…€ ์—†์ด๋Š” ์•„๋ฌด๋ฐ๋„ ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์—ฐ์Šต์€ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์•ž์„œ ์„ค๋ช…ํ•œ ๋ช…๋ น์„ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค.)"Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 1

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>
- ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผํ•  ๋‚ด์šฉ์ด ์žˆ์œผ๋ ค๋ฉด ๊ฑฐ๊ธฐ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ๋…ผ๋ฆฌ์ ์ธ๊ฐ€? - ๋„ค, ์„ ์žฅ๋‹˜. bgg ๋”ฐ๋ผ์„œ ๋ฉ”์„œ๋“œ์™€ ์ด์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Maven์„ ์œ„ํ•œ ์ผ๋ฐ˜ ํด๋” ๊ตฌ์„ฑํ‘œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
src ๋ฉ”์ธ ์ž๋ฐ” ๋ฆฌ์†Œ์Šค ํ…Œ์ŠคํŠธ ์ž๋ฐ” ๋ฆฌ์†Œ์Šค
src/main/java ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์—…ํ•  ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ์ฒ˜์Œ์— ์กฐ์ง๋ช…( groupId )์„ ๋„ฃ๊ณ  ๊ทธ ๋‹ค์Œ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋„ฃ๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค . ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: com.github.javarushcommunity.mavendemo ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๋งค์šฐ ์ข‹์€ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ImageComparator ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Maven๊ณผ ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ IDEA์— ์—ฐ๊ฒฐ

์•„์ด๋””์–ด๊ฐ€ ์ข…์†์„ฑ์„ ์ธ์‹ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ œ์•ˆํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  1. ์ฝ”๋“œ ์†Œ์Šค๊ฐ€ ์–ด๋””์— ์žˆ๊ณ  ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋””์— ์žˆ์„ ๊ฒƒ์ธ์ง€ ์•„์ด๋””์–ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.
  2. ์•„์ด๋””์–ด์— Maven ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
์ฒซ ๋ฒˆ์งธ๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ์ด ์•„์ด์ฝ˜์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 2์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๊ณ  ๋ชจ๋“ˆ ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค . ๋‹ค์Œ์œผ๋กœ, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ƒ์„ฑ๋œ ํด๋”์— ํ•„์ˆ˜ ๋งˆ์ปค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 3.
  • โ€ข src/main/java - ์†Œ์Šค
  • โ€ข src/main/resources - ๋ฆฌ์†Œ์Šค
  • โ€ข src/test/java - ํ…Œ์ŠคํŠธ
  • โ€ข src/test/resources - ํ…Œ์ŠคํŠธ ๋ฆฌ์†Œ์Šค
  • โ€ข ๋Œ€์ƒ - ์ œ์™ธ๋จ
์ด๋Ÿฌํ•œ ๋ชจ๋“  ์†Œ์Šค, ๋ฆฌ์†Œ์Šค, ํ…Œ์ŠคํŠธ, ํ…Œ์ŠคํŠธ ๋ฆฌ์†Œ์Šค ๋ฐ ์ œ์™ธ ํ•ญ๋ชฉ ์€ ๋‹ค์Œ์œผ๋กœ ํ‘œ์‹œ๊ฐ€ ์ž‘์„ฑ๋œ ์ค„์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ํด๋”๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๋ ˆ์ด๋ธ”์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” Maven ํ”„๋กœ์ ํŠธ๋ฅผ IDEA์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋งˆ๋ฒ• ๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด IDEA์—์„œ pom.xml ํŒŒ์ผ์„ ์ฐพ์•„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ Add as Maven Project๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. (: ๊ทธ ํ›„ Maven ๋ช…๋ น์„ ์—ด๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Maven"Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 4 ํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค ."Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 5

์šฐ๋ฆฌ๋Š” "ํ”„๋กœ์ ํŠธ"์— ๋Œ€ํ•œ ์†Œ์Šค์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์•„์ด๋””์–ด์— 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์—๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” ์ด๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ทธ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํŒŒ์ผ ์ž์ฒด์—์„œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•˜๊ณ  ๋‚˜ํƒ€๋‚˜๋Š” ์ „๊ตฌ์—์„œ ํ…Œ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 6ํ–ฅํ›„ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์„ค์ •์„ ์„ ํƒํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์•„๋ฌด ๊ฒƒ๋„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ํ™•์ธ์„ ํด๋ฆญํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 7ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€์—์„œ ์ด๋ฏธ์ง€ ๋น„๊ต๋ฅผ ๊ฐ€์ ธ์™€ ํ…Œ์ŠคํŠธ ๋ฆฌ์†Œ์Šค(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์„ ์—ฝ๋‹ˆ๋‹ค . "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 8์ด์ œ ์ปดํŒŒ์ผ์„ ํด๋ฆญ ํ•˜๊ณ  ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 9์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ์šฐ๋ฆฌ์˜ ์†Œ์Šค๋Š” ์ปดํŒŒ์ผ๋˜์–ด ์ง€์ •๋œ ๊ฒฝ๋กœ์— ๋ฐฐ์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ช…๋ น์ด ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค - BUILD SUCCESS.
๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋กœ ์ด๋™ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๋ฉด ๋Œ€์ƒ ํด๋”๊ฐ€ ์ถ”๊ฐ€ ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋”๋ฅผ ๊ณ„์† ํƒ์ƒ‰ํ•˜๊ณ  ์ปดํŒŒ์ผ๋œ ImageComparator ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 10์ด์ œ ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ช…๋ น์„ ๋‚ด๋ฆฌ์„ธ์š”. ์ด๋ฅผ ์œ„ํ•ด clean ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(๋‘ ๋ฒˆ ํด๋ฆญ) . "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 11๊ฒฐ๊ณผ์ ์œผ๋กœ ์ปดํŒŒ์ผ ๋ช…๋ น ์ดํ›„์— ์ƒ์„ฑ๋œ ๋ชจ๋“  ๋‚ด์šฉ์ด ํฌํ•จ๋œ ๋Œ€์ƒ ํด๋”๋ฅผ ์‚ญ์ œํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค . test ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . Tests run: 0... ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ตœ๋Œ€ 2๊ฐœ๊นŒ์ง€ ์ผ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์–ด๋–ค ์ด์œ ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ ์ฝ”๋”ฉ์€ ๊ทธ๋Ÿฐ ๊ฑฐ๋‹ˆ๊นŒ ์›น์œผ๋กœ ๊ฐ€๋ณด์ž) 5๋ถ„ ์ •๋„ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ JUnit5๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋๋‹ค. "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 12
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๋ฒ„์ „์„ <properties/> ์— ๋„ฃ์€ ๋‹ค์Œ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . "Java ํ”„๋กœ์ ํŠธ A๋ถ€ํ„ฐ Z๊นŒ์ง€": Maven์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์—ˆ๋˜ ๋ชจ๋“  ๊ฒƒ.  ํŒŒํŠธ 2 - 13์ด์ œ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค! ๋‘ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜์—ˆ๊ณ  ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ! ์ด์ œ ์šฐ๋ฆฌ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋Œ€์ƒ ํด๋” ์—์„œ jarnik์„ ์ฐพ์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค . "Java-ะฟั€ะพะตะบั‚ ะพั‚ ะ ะดะพ ะฏ": ะ’ัะต, ั‡ั‚ะพ ะฒั‹ ั…ะพั‚ะตะปะธ ะทะฝะฐั‚ัŒ ะพ Maven. ะงะฐัั‚ัŒ 2 - 14์ฆ‰, ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ–ˆ์Œ์„ ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ๊ทธ ํ›„์—(ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๊ฒƒ์ด ์–‘ํ˜ธํ•จ์„ ๋ณด์žฅ) ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด๊ด€์†Œ. ๊ทธ๋ฆผ์€ Maven ์‹คํ–‰ ๋กœ๊ทธ์™€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์— ์•„์นด์ด๋ธŒ๊ฐ€ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ install ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ํ›Œ๋ฅญํ•œ ํŒ€. ์•„, ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ ์ „์—. clean ์„ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ ๋ฏธ๋ž˜์— ๋ง๋„ ์•ˆ๋˜๋Š” ์ผ๋กœ๋ถ€ํ„ฐ ๋‹น์‹ ์„ ๊ตฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค - ๋‚˜๋Š” ๋‚ด ์ž์‹ ์˜ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๊ทธ๊ฒƒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค))) ๋”ฐ๋ผ์„œ ๋จผ์ € clean ์„ ์‹คํ–‰ ํ•œ ๋‹ค์Œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค . "Java-ะฟั€ะพะตะบั‚ ะพั‚ ะ ะดะพ ะฏ": ะ’ัะต, ั‡ั‚ะพ ะฒั‹ ั…ะพั‚ะตะปะธ ะทะฝะฐั‚ัŒ ะพ Maven. ะงะฐัั‚ัŒ 2 - 15ํ™”์‚ดํ‘œ๊ฐ€ ์žˆ๋Š” ๊ณณ์— ๋กœ์ปฌ ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ์ž‘์„ฑํ•œ ๋‚ด์šฉ์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์€ ๋‚ด ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค : /Users/roman_beskrovnyi/.m2 ๊ทธ๋ฆฌ๊ณ  ์•„์นด์ด๋ธŒ ์ž์ฒด๋Š” ์—ฌ๊ธฐ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค : /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT ๊ทธ๋ฆฌ๊ณ  ํ„ฐ๋ฏธ๋„๋กœ ๊ฐ€์„œ ์•„์นด์ด๋ธŒ๊ฐ€ ์žˆ๋Š” ํด๋”์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ํ•˜๋ฉด ๊ฑฐ๊ธฐ์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. "Java-ะฟั€ะพะตะบั‚ ะพั‚ ะ ะดะพ ะฏ": ะ’ัะต, ั‡ั‚ะพ ะฒั‹ ั…ะพั‚ะตะปะธ ะทะฝะฐั‚ัŒ ะพ Maven. ะงะฐัั‚ัŒ 2 - 16๋ฐฐํฌ๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ ์•„์ง ๋‹ค๋ฅธ ์•„์นด์ด๋ธŒ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

์ถœ๋ ฅ ๋Œ€์‹ 

์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” Maven์ด ๋ฌด์—‡์ธ์ง€, ๊ฑฐ๊ธฐ์—๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”์ง€, ์ฃผ์š” ๋ช…๋ น์€ ๋ฌด์—‡์ธ์ง€ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐ„๋‹จํ•˜๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด ์ „๋‹ฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๋Š” maven-demo ํ”„๋กœ์ ํŠธ์˜ GitHub์— ์žˆ๋Š” JavaRush ์ปค๋ฎค๋‹ˆํ‹ฐ ์กฐ์ง์— ์žˆ์Šต๋‹ˆ๋‹ค . ๋ชจ๋“  ์งˆ๋ฌธ์„ ๋Œ“๊ธ€์— ์ ์–ด์ฃผ์„ธ์š”. ํ‰์†Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JRTB ํ”„๋กœ์ ํŠธ์˜ ์ƒˆ ์ฝ”๋“œ๋ฅผ ๋†“์น˜์ง€ ์•Š๋„๋ก Github์—์„œ ๋‚ด ๊ณ„์ •์„ ๊ตฌ๋…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค . ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ง์”€๋“œ๋ฆฌ์ง€๋งŒ ๊ทธ๋Š” ์ฃฝ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๋‹จ์ˆœํžˆ ์ •์ฒด ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค))

์‹œ๋ฆฌ์ฆˆ์˜ ๋ชจ๋“  ์ž๋ฃŒ ๋ชฉ๋ก์€ ์ด ๊ธฐ์‚ฌ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION