JavaRush /Java Blog /Random-TW /您想了解的關於 Maven 的一切 - “Java 專案從 A 到 Z”
Roman Beekeeper
等級 35

您想了解的關於 Maven 的一切 - “Java 專案從 A 到 Z”

在 Random-TW 群組發布
大家好,親愛的朋友們。我馬上道歉:我記得我答應每週寫一篇文章。沒有成功。我只是還沒有抽出時間坐下來好好地寫作,但我不想這樣做或那樣做。我不會抱怨原因,因為我不需要它,你當然也不感興趣。該專案並沒有死,它處於停滯狀態:)我們繼續!今天的材料專門針對 Maven。 《Java 專案從頭到尾》:您想了解的關於 Maven 的一切 - 1

我們來談談Maven

首先您需要安裝它。當然,由於我擁有Mac,所以只能展示Mac的安裝。只是運氣不好而已。我很久以前就安裝了它,所以你必須自己安裝:)
本資料中有安裝 Maven 的說明。

為什麼我們需要 Maven?

Maven 是專案建置工具,與 Gradle 和 Ant 一樣。因為我將在 JRTB(JavaRush Telegram Bot)中使用它,所以我想向您介紹最新情況。如今,沒有一個項目是在沒有組裝系統的情況下創建的,因為它多次簡化了我們的生活。這允許:
  • • 拉起所有必要的函式庫(就組裝工具而言-依賴關係(即依賴關係));
  • • 確切地確定專案需要如何編譯以及編譯成什麼內容(例如,我們想要建置為 WAR、JAR 還是可執行 JAR);
  • • 將項目版本設定在一處,以便在組裝過程中得到指示;
  • • 描述專案及其生命週期;
  • • 新增所謂的插件(英文單字Plugin 的繁體版本);
  • • 在共用儲存庫中發布庫,以便其他項目可以將它們作為依賴項提取。
總的來說,他做的事情很多,而且都是有用的。我想說的是:對於新手工程師來說,沒有必要從頭到尾了解所有功能。在這裡,與 git 一樣,了解基礎知識和一般概念非常重要。這就是我們要做的。對我們來說,Maven 從專案根目錄中名為pom.xml的 XML 檔案開始。我們將在實踐中做所有事情,因此首先我們將在 JavaRush 社群中創建我們的第一個專案。為了明智地做每件事,我將使用儲存庫模板,其中已經配置了我在 JR 上描述過的基本內容。要創建,請轉到包含模板的存儲庫,然後單擊“使用此模板”按鈕:《Java 專案從頭到尾》:您想了解的關於 Maven 的一切 - 2因此,我們在社區中擁有第一個存儲庫:)我們在本地下載該項目。為此,透過想法,從版本控制轉到 File -> New -> Project。在出現的視窗中,輸入 Github 上專案的連結(如果每個人都單獨建立同一個專案並跟我一起完成所有步驟,效果會更好):點擊「Java 專案從 A 到 Z」:您想了解的關於 Maven 的一切 - 3Clone 專案就被複製了

pom.xml 是一切的頭

您需要的一切都在 pom.xml 中。有關專案、其開發人員以及專案儲存在哪個遠端儲存庫的所有資訊。首先,我們對以下區塊感興趣: <project/> - 這是主區塊,其中包含有關項目的所有資訊。所有其他人都將明確或傳遞地參與其中。在開始標籤裡面寫著這樣的內容:
<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">
最重要的是,下一行也是用所有 pomnik 編寫的(該俚語據說來自 pom.xml :))。
<modelVersion>4.0.0</modelVersion>
但接下來它會變得更有趣:我們將描述我們如何識別我們的紀念館所描述的項目。以我的庫為例,我將描述它,然後我們將它添加到我們的記憶體中,添加到新創建的項目中:
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Image Comparison</name>
這裡主要的事情是:
  • groupId是開發組織或單一工程師的識別碼。這通常是域的相反順序。作為範例,此處描述了 Github 上的romankh3帳戶。這是非常重要的。假設 Spring 生態係是com.springframework。這樣你就可以區分原始項目和其他人的分支,或僅僅透過項目名稱的重合來區分。
  • artifaceId已經是該記憶體中所描述的特定項目的名稱。
  • version——該專案的版本。這裡的一切都一目了然:添加了新功能,修復了舊功能,重構或進行了一些其他更改 - 增加了版本。
  • 打包- 這裡我們描述Maven 應如何組裝我們的專案。要嘛在罐子裡,要嘛在戰爭裡,要嘛其他一些地方
  • 名稱- 這是一個更令人愉悅的項目名稱。
還有一些東西不需要填寫 - Maven 沒有它們也能工作 - 但如果你需要發布庫供公眾使用,那麼絕對值得添加它們。這些是什麼東西?
  • • 專案儲存庫的路徑,可以從其中下載

    <url>https://romankh3.github.io/image-comparison/</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 區塊,描述如何存取項目:

    <scm>
    <connection>git@github.com:romankh3/image-comparison.git</connection>
    <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection>
     <url>https://github.com/romankh3/image-comparison</url>
    </scm>

描述完一般資訊後,我們可以加入一個具有依賴關係的區塊:
<dependencies>
   <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>2.26.0</version>
       <scope>test</scope>
   </dependency>
   <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <version>5.5.2</version>
       <scope>test</scope>
   </dependency>
<dependency>
   	<groupId>com.github.romankh3</groupId>
   	<artifactId>image-comparison</artifactId>
   	<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
這裡我添加了兩個庫用於測試:它們總是需要的。您可能已經註意到,依賴項有一個 Scope - 範圍。在我們的例子中,指定了測試,這意味著我們根本不會在主程式碼中看到這種依賴關係。接下來,為了讓一切看起來很漂亮,您可以使用單獨的標籤來顯示<properties/>版本:
<properties>
   <mockito.version>2.26.0</mockito.version>
   <junit.version>5.5.2</junit.version>
   <image.comparison.version>4.3.0</image.comparison.version>
</properties>
因此可以使用${PROPERTY_NAME}構造更新相依性區塊:
<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>
       <scope>test</scope>
   </dependency>
</dependencies>
接下來是一個大的<build/>區塊,其中包含一個重要的<plugins/>區塊,您可以使用它自訂建置流程。您可以在<plugins/>區塊中新增一個或多個插件,如下所示:
<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-source-plugin</artifactId>
           <version>3.2.0</version>
           <executions>
               <execution>
                   <id>attach-sources</id>
                   <goals>
                       <goal>jar</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>
在這裡你可以看到我添加了兩個插件 - maven-source-pluginmaven-javadoc-plugin。每個插件都有可以設定的設定、屬性(參數),從而自訂插件。未來這對我們來說會很有趣。現在,讓我們記住並繼續前進。與相依性相同,我們將插件版本放入<properties/>中。在此基礎上,您可以建立以下記憶體:
<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>

   <properties>
       <mockito.version>2.26.0</mockito.version>
       <junit.version>5.5.2</junit.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>
       <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>
   </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>

Maven 生命週期

Maven 有一個叫做 Maven 生命週期的東西。值得說的是,這是 Maven 可以執行的一組任務。除了maven生命週期之外,可能還有其他任務。這是關於什麼的?有一組命令可以用來組裝一個項目(再次構建,當然,是英文的描圖紙,但沒有這個就無處可去),刪除 Maven 收集的構建,安裝在 Maven 本地,這樣你就可以在本地拉取項目作為依賴項,等等。現在讓我們更詳細地討論一切。在寫下我對這些團隊的看法之前,我決定閱讀他們在網路上寫的關於此事的內容……並意識到這很難描述。對於工作,對於初始工作,我們需要幾個命令。讓我們來描述一下它們:
  • 編譯— 編譯專案。這是第一階段:在此期間您可以查看專案中是否存在任何編譯錯誤。有時在IDEA中工作會出現各種跨越,這就是為什麼編譯問題出現在不應該存在的地方。所以這個指令會點所有的 i。
  • test - 執行所有在JUnit 上執行的測試,並且位於Maven 期望的位置(src/test/java是您的隊長)。
  • package是下一個命令,它包括前面的兩個命令:即首先在其中啟動compile命令,然後將test命令發送到編譯後的項目,如果這裡一切正常,則開始創建存檔(我們在<packaging/>中選擇的存檔))
  • 安裝-當我們在機器上安裝Maven 時,我們就有了一個本地Git 儲存庫,用於儲存我們為專案下載的庫。但 Maven 的美妙之處在於,我們可以使用install命令將我們的專案新增至本地 Git 儲存庫,並在本地使用我們的專案作為依賴項。不相信我?試試看:)這樣你就可以快速看到你的專案看起來像是對另一個專案的依賴。
  • 部署是之前一切的精華。該命令不僅能夠將專案新增至本機儲存庫作為安裝,而且還能夠新增至遠端儲存庫,每個有存取權限的人都可以將其用作依賴項。
  • verify - 一個命令,用於檢查所有內容並判斷專案是否已準備好部署。
  • clean - 當然,編譯後的檔案和檔案必須儲存在某個地方。Maven 有一個目標資料夾。這是項目不需要的數據。在重新組裝項目之前,最好先刪除之前的所有內容。這就是clean指令的用途。

Maven 插件

我想更多地討論插件,但文章已經很長了。這將會是你的作業。了解它是什麼以及如何使用它。 在本文的後續部分,我們將在實踐中處理 Maven。

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

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