JavaRush /จาวาบล็อก /Random-TH /ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven (ตอนที่ 2) - "โครงการ...
Roman Beekeeper
ระดับ

ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven (ตอนที่ 2) - "โครงการ Java จาก A ถึง Z"

เผยแพร่ในกลุ่ม
ทุกอย่างเกี่ยวกับ 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 ทรัพยากร Java หลัก ทดสอบทรัพยากร Java
ใน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/ทรัพยากร - ทรัพยากร
  • src/test/java - การทดสอบ
  • src/ทดสอบ/ทรัพยากร - ทรัพยากรทดสอบ
  • เป้าหมาย - ไม่รวม
แหล่งที่มา ทรัพยากร การ ทดสอบทรัพยากรการทดสอบ และการยกเว้นทั้งหมดเหล่านี้สามารถพบได้ในบรรทัดที่ทำเครื่องหมายว่า เขียนไว้ เลือกโฟลเดอร์และติดป้ายกำกับตามนั้น และขั้นตอนที่สองคือการเพิ่มโปรเจ็กต์ Maven ลงใน IDEA เพื่อให้สามารถใช้เวทย์มนตร์ได้ ในการดำเนินการนี้ คุณต้องค้นหาไฟล์ pom.xml ใน IDEA และคลิกขวาเพื่อเลือกAdd as Maven Project เพียงเท่านี้คุณก็จะมีความสุข (: หลังจากนี้จาน Maven"โครงการ Java จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven  ส่วนที่ 2 - 4จะปรากฏขึ้นทางด้านขวาซึ่งคุณสามารถเปิดและรันคำสั่ง Maven ในนั้นได้"โครงการ 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 : "โครงการ Java จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven  ตอนที่ 2 - 12Tests run: 0... แต่เราเขียนได้มากถึงสองอัน นั่นคือด้วยเหตุผลบางประการที่ทำให้การทดสอบไม่ทำงาน การเขียนโค้ดสดเป็นแบบนั้น ไปที่เว็บกันเถอะ) หลังจากใช้งาน Google ไป 5 นาที ฉันพบว่าด้วย JUnit5 คุณต้องเพิ่มปลั๊กอินอีกหนึ่งอัน:
<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 จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven  ส่วนที่ 2 - 14นั่นคือเราเห็นอีกครั้งว่าการทดสอบผ่านไปแล้ว และหลังจากนี้ (รับประกันว่าทุกอย่างในโปรเจ็กต์นั้นดี) เราก็สามารถรวบรวมโปรเจ็กต์เป็น คลังเก็บเอกสารสำคัญ. รูปนี้แสดงให้เห็นว่ามีไฟล์เก็บถาวรในบันทึกการเปิดใช้งาน Maven และโครงสร้างโปรเจ็กต์ ต่อไปเรามีการติดตั้ง . ทีมที่ยอดเยี่ยม โอ้ก่อนที่ฉันจะลืม ถือเป็นแนวปฏิบัติที่ดีในการล้างโปรเจ็กต์ก่อนดำเนินการคำสั่งใหม่โดยการรันclean สิ่งนี้จะช่วยคุณจากเรื่องไร้สาระในอนาคต - ฉันรับประกันจากประสบการณ์ของตัวเอง))) ดังนั้นก่อนอื่นเราจึงรันcleanแล้วติดตั้ง : "โครงการ Java จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven  ส่วนที่ 2 - 15ลูกศรอยู่ที่ไหนคุณจะเห็นได้อย่างชัดเจนว่าที่เก็บในเครื่องอยู่ที่ใด จากสิ่งที่พวกเขาเขียน นี่คือแนวทางของฉัน: /Users/roman_beskrovnyi/.m2 และไฟล์เก็บถาวรจะอยู่ที่นี่: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT และถ้าเราไปที่เทอร์มินัลแล้วพยายามเข้าไปในโฟลเดอร์ที่มีไฟล์เก็บถาวรอยู่ มันจะอยู่ที่นั่น: "โครงการ Java จาก A ถึง Z": ทุกสิ่งที่คุณอยากรู้เกี่ยวกับ Maven  ตอนที่ 2 - 16การปรับใช้จะไม่แสดงให้เราเห็น และคุณยังไม่ต้องการสิ่งอื่นอีก...

แทนที่จะเป็นเอาท์พุต

วันนี้เรามาดูกันอย่างรวดเร็วว่า Maven คืออะไร มีอะไรบ้าง คำสั่งหลักที่นั่นคืออะไร ฉันพยายามถ่ายทอดสิ่งนี้อย่างเรียบง่ายและมีตัวอย่าง ซอร์สโค้ดทั้งหมดสำหรับตัวอย่างอยู่ในองค์กรชุมชน JavaRush บน GitHub ในโปร เจ็กต์ maven-demo เขียนคำถามทั้งหมดในความคิดเห็น ตามปกติ ฉันขอแนะนำให้คุณสมัครบัญชีของฉันบน Githubเพื่อไม่ให้พลาดรหัสใหม่สำหรับโครงการ JRTB ของเรา เขายังไม่ตายด้วยซ้ำ เขาอยู่ในภาวะชะงักงัน))

รายการเนื้อหาทั้งหมดในซีรีส์นี้อยู่ที่ตอนต้นของบทความนี้

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION