JavaRush /Java Blog /Random-TW /您想了解的關於 Maven 的一切。(第 2 部分)-“Java 專案從頭到尾”
Roman Beekeeper
等級 35

您想了解的關於 Maven 的一切。(第 2 部分)-“Java 專案從頭到尾”

在 Random-TW 群組發布
關於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/resources - 資源
  • src/test/java - 測試
  • src/test/resources - 測試資源
  • 目標- 排除
所有這些來源、資源、測試、測試資源和排除都可以在標記為的行中找到。選擇一個資料夾並為其新增相應的標籤。第二步是將maven專案加入到IDEA中,以便它可以發揮其魔力。為此,需要在IDEA中找到pom.xml文件,右鍵選擇Add as Maven Project。就是這樣,你會很高興的(:之後,「Java 專案從 A 到 Z」:您想了解的有關 Maven 的一切。 第 2 - 4 部分右側會出現一個Maven板塊,你可以在裡面打開並運行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 - 12 部分Tests run: 0...但我們寫了多達兩個。也就是說,由於某種原因測試沒有運行。即時編碼就是這樣,讓我們上網吧)經過 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-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 14也就是說,我們再次看到測試已經通過,之後(保證項目中的一切都很好)我們可以將項目收集到一個檔案。此圖顯示maven啟動日誌和專案結構中有一個存檔。接下來我們進行安裝。很棒的團隊。哦,在我忘記之前。在執行新命令之前透過執行clean來清理專案被認為是很好的做法。這將使您免於將來胡言亂語 - 我以我自己的經驗保證)))因此,首先我們運行clean,然後install"Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 15箭頭所在的位置,您可以清楚地看到本地存儲庫所在的位置。根據他們寫的內容,這是我的方式: /Users/roman_beskrovnyi/.m2 存檔本身將位於此處: /Users/roman_beskrovnyi/.m2/repository/com/github/javarushcommunity/maven-demo/1.0-快照 如果我們進入終端並嘗試進入存檔所在的資料夾,那麼它就會在那裡:"Java-проект от А до Я": Все, что вы хотели знать о Maven. Часть 2 - 16部署不會向我們顯示,而且您還不需要其他的...

而不是輸出

今天我們快速了解 Maven 是什麼,裡面有什麼,裡面有哪些主要指令。我試著透過例子簡單地表達這一點。此範例的所有原始程式碼都位於 GitHub 上 JavaRush 社群組織的maven-demo專案中。將所有問題寫在評論中。像往常一樣,我建議您在 Github 上訂閱我的帳戶,以免錯過我們 JRTB 專案的新程式碼。再說一次,他沒有死。他只是處於停滯狀態))

此系列所有資料的清單位於本文開頭。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION