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