JavaRush /Blog Java /Random-VI /Mọi thứ bạn muốn biết về Maven. (Phần 2) - "Dự án Java từ...
Roman Beekeeper
Mức độ

Mọi thứ bạn muốn biết về Maven. (Phần 2) - "Dự án Java từ A đến Z"

Xuất bản trong nhóm
Tất cả về Maven: sự khởi đầu tôi thích luyện tập. Bạn thậm chí không thể tưởng tượng được đôi khi việc viết về lý thuyết có thể tẻ nhạt đến mức nào. Tuy nhiên, không có nơi nào không có cô ấy. Tất nhiên, thực hành là một vấn đề khác. Bây giờ, hãy nhanh chóng xem qua các lệnh mà tôi đã mô tả trước đó và chúng ta sẽ hoàn thành)"Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 1

Thiết lập pom.xml

Trong khi đang xây dựng lý thuyết, chúng tôi đã nhận được một tệp pom.xml khá tốt:
Xem mã
<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>
- Nhưng để có thứ gì đó biên dịch thì cần phải thêm vào đó! Hợp lý? - Vâng! Thưa đội trưởng. bgg Vì vậy, hãy thêm một lớp sẽ có một phương thức và hai bài kiểm tra cho nó. Hãy tạo sơ đồ thư mục thông thường cho Maven:
src tài nguyên java chính kiểm tra tài nguyên java
Trong src/main/java, chúng ta sẽ tạo một gói mà chúng ta sẽ làm việc trong đó. Để soạn chính xác, tốt nhất bạn nên đặt tên của tổ chức ( groupId ) ở đầu và sau đó là tên của dự án. Trong trường hợp của chúng tôi, nó sẽ như thế này: com.github.javarushcommunity.mavendemo Đối với tôi, đây là một gói rất tốt. Trong đó, chúng ta sẽ tạo lớp ImageComparator , trong đó chúng ta sẽ viết hai bài kiểm tra.

Kết nối Maven và toàn bộ dự án với IDEA

Để ý tưởng có thể nhận ra sự phụ thuộc của chúng tôi và đề xuất sử dụng chúng trong dự án, chúng tôi cần thực hiện một số điều:
  1. Cho ý tưởng biết nguồn mã sẽ ở đâu và nơi kiểm thử sẽ ở đâu.
  2. Thêm dự án maven vào ý tưởng.
Để đạt được mục tiêu đầu tiên, bạn cần tìm biểu tượng này: "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 2Nhấp vào nó và đi đến phần Mô-đun . Tiếp theo, bạn cần cung cấp cho các thư mục đã tạo điểm đánh dấu cần thiết, như thể hiện trong hình bên dưới: "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 3Tức là:
  • src/main/java - Nguồn
  • src/main/resources - Tài nguyên
  • src/test/java - Kiểm tra
  • src/test/resources - Tài nguyên kiểm tra
  • mục tiêu - Bị loại trừ
Tất cả các Nguồn, Tài nguyên, Kiểm tra, Tài nguyên kiểm tra và Bị loại trừ này có thể được tìm thấy trên dòng nơi viết Đánh dấu là . Chọn một thư mục và dán nhãn cho phù hợp. Và bước thứ hai là thêm dự án maven vào IDEA để nó có thể phát huy tác dụng kỳ diệu của mình. Để thực hiện việc này, bạn cần tìm file pom.xml trong IDEA và nhấn chuột phải chọn Add as Maven Project . Và thế là xong, bạn sẽ rất vui (: Sau đó, một tấm Maven"Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 4 sẽ xuất hiện ở bên phải , bạn có thể mở và chạy các lệnh Maven trong đó."Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 5

Chúng tôi viết nguồn và kiểm tra cho “dự án” của mình

Vì vậy, chúng tôi đã thêm Maven vào ý tưởng, bây giờ hãy mô tả lớp sẽ đóng vai trò là nguồn cho chúng tôi:

Bộ so sánh hình ảnh:

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();
   }
}
Hãy tạo các bài kiểm tra cho mục đích này. Lớp kiểm tra phải nằm trong cùng một gói, chỉ trong src/test/java. Ý tưởng biết điều này và bạn có thể tận dụng khả năng của nó. Để thực hiện việc này, hãy nhấp vào tên của lớp trong chính tệp đó và chọn Tạo bài kiểm tra trên bóng đèn xuất hiện: "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 6Chúng tôi sẽ được yêu cầu chọn cài đặt cho bài kiểm tra trong tương lai. Chúng tôi không cài đặt bất cứ thứ gì, chỉ cần nhấp vào OK: "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 7Đối với thử nghiệm của chúng tôi, chúng tôi sẽ so sánh hình ảnh từ các hình ảnh thử nghiệm và đưa chúng vào tài nguyên thử nghiệm (src/test/resource). Sau đó chúng ta sẽ viết hai bài kiểm tra. Người ta sẽ kiểm tra xem hai bức ảnh này có khác nhau không. Và ở bên kia, chúng ta sẽ truyền tải cùng một bức tranh và mong đợi câu trả lời rằng chúng giống nhau. Sau đó, chúng tôi nhận được bài kiểm tra sau:
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);
   }
}
Các bài kiểm tra rất đơn giản, tôi sẽ không tập trung vào chúng. Nếu bạn quan tâm, một ngày nào đó tôi sẽ viết một bài về thử nghiệm (viết về nó trong phần bình luận).

Thực thi các lệnh Maven

Bây giờ, khi mọi thứ đã sẵn sàng để xem công việc của các nhóm, hãy chọn dự án của chúng tôi trong plugin Maven và mở Lifecycle trong đó : "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 8Bây giờ hãy nhấp vào biên dịch và xem điều gì đã xảy ra: "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 9Từ đó chúng ta có thể rút ra hai kết luận:
  1. Nguồn của chúng tôi đã được biên soạn và đặt trong đường dẫn được chỉ định.
  2. Lệnh đã thành công - XÂY DỰNG THÀNH CÔNG.
Và thực sự, nếu chúng ta đi vào cấu trúc dự án và xem những gì đã thay đổi ở đó, chúng ta sẽ thấy thư mục đích đã được thêm vào, chúng ta vẫn có thể khám phá và tìm thấy lớp ImageComparator đã biên dịch của mình : "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 10Bây giờ tôi muốn bắt đầu một gói mới lệnh từ đầu. Để thực hiện việc này, hãy chạy (nhấp hai lần) lệnh sạch : "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 11Kết quả là chúng tôi được thông báo rằng chúng tôi đã xóa thư mục đích , nơi chứa mọi thứ được tạo sau lệnh biên dịch . Hãy chạy lệnh test : "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 12Tests run: 0... nhưng chúng tôi đã viết nhiều nhất là HAI. Đó là, vì lý do nào đó mà các bài kiểm tra đã không chạy được. Code trực tiếp là vậy đó, chúng ta vào web nhé) Sau 5 phút search trên Google thì mình thấy với JUnit5 bạn cần thêm 1 plugin nữa:
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.22.2</version>
</plugin>
Hãy thêm nó vào dự án, đặt phiên bản vào <properties/> tốt nhất có thể và khởi động lại thử nghiệm : "Dự án Java từ A đến Z": Mọi thứ bạn muốn biết về Maven.  Phần 2 - 13Bây giờ lại là một vấn đề khác! Hai cuộc thử nghiệm đã diễn ra và thành công. Ngọn lửa! Bây giờ chúng tôi chạy gói của mình và hy vọng rằng chúng tôi sẽ tìm thấy jarnik trong thư mục đích : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14Nghĩa là, chúng tôi lại thấy rằng các thử nghiệm đã vượt qua và sau đó (đảm bảo rằng mọi thứ trong dự án đều tốt), chúng tôi có thể thu thập dự án vào một lưu trữ. Hình vẽ cho thấy có một kho lưu trữ trong nhật ký khởi chạy maven và cấu trúc dự án. Tiếp theo chúng ta đã cài đặt . Một đội tuyệt vời. Ồ, trước khi tôi quên mất. Việc dọn dẹp dự án trước khi thực hiện lệnh mới bằng cách chạy clean được coi là cách tốt . Điều này sẽ giúp bạn tránh khỏi những điều vô nghĩa trong tương lai - Tôi đảm bảo điều đó từ kinh nghiệm của bản thân))) Vì vậy, đầu tiên chúng ta chạy clean , sau đó cài đặt : "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15Mũi tên ở đâu, bạn có thể thấy rõ vị trí của kho lưu trữ cục bộ. Dựa trên những gì họ viết, đây là cách của tôi: /Users/roman_beskrovnyi/.m2 Và bản thân kho lưu trữ sẽ được đặt ở đây: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0- SNAPSHOT Và nếu chúng ta đi đến thiết bị đầu cuối và cố gắng truy cập vào thư mục chứa kho lưu trữ, thì nó sẽ ở đó: "Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16triển khai sẽ không hiển thị cho chúng tôi và bạn chưa cần những thứ khác...

Thay vì đầu ra

Hôm nay chúng ta cùng tìm hiểu nhanh Maven là gì, có những gì, các lệnh chính ở đó là gì nhé. Tôi đã cố gắng truyền đạt điều này một cách đơn giản và có ví dụ. Tất cả mã nguồn của ví dụ đều nằm trong tổ chức Cộng đồng JavaRush trên GitHub trong dự án maven-demo . Viết tất cả các câu hỏi trong các ý kiến. Như thường lệ, tôi khuyên bạn nên đăng ký tài khoản của tôi trên Github để không bỏ lỡ mã mới cho dự án JRTB của chúng tôi. Một lần nữa, anh vẫn chưa chết. Anh ấy chỉ đơn giản là đang ở trạng thái ứ đọng))

Danh sách tất cả các tài liệu trong loạt bài này nằm ở đầu bài viết này.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION