大家好,親愛的朋友們。我馬上道歉:我記得我答應每週寫一篇文章。沒有成功。我只是還沒有抽出時間坐下來好好地寫作,但我不想這樣做或那樣做。我不會抱怨原因,因為我不需要它,你當然也不感興趣。該專案並沒有死,它處於停滯狀態:)我們繼續!今天的材料專門針對 Maven。
複製了。
我們來談談Maven
首先您需要安裝它。當然,由於我擁有Mac,所以只能展示Mac的安裝。只是運氣不好而已。我很久以前就安裝了它,所以你必須自己安裝:)本資料中有安裝 Maven 的說明。 |
為什麼我們需要 Maven?
Maven 是專案建置工具,與 Gradle 和 Ant 一樣。因為我將在 JRTB(JavaRush Telegram Bot)中使用它,所以我想向您介紹最新情況。如今,沒有一個項目是在沒有組裝系統的情況下創建的,因為它多次簡化了我們的生活。這允許:- • 拉起所有必要的函式庫(就組裝工具而言-依賴關係(即依賴關係));
- • 確切地確定專案需要如何編譯以及編譯成什麼內容(例如,我們想要建置為 WAR、JAR 還是可執行 JAR);
- • 將項目版本設定在一處,以便在組裝過程中得到指示;
- • 描述專案及其生命週期;
- • 新增所謂的插件(英文單字Plugin 的繁體版本);
- • 在共用儲存庫中發布庫,以便其他項目可以將它們作為依賴項提取。
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 應如何組裝我們的專案。要嘛在罐子裡,要嘛在戰爭裡,要嘛其他一些地方。
- •名稱- 這是一個更令人愉悅的項目名稱。
- • 專案儲存庫的路徑,可以從其中下載
<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-plugin和maven-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指令的用途。
GO TO FULL VERSION