Maven簡單理解和介紹
前言
本文主要面向Maven的初學者,介紹了何為Maven以及Maven的簡單用法。更加詳細的用法可以檢視文章底部的連結。
1 Maven簡介
1.1 何為Maven
Maven是Apache組織開發的一個開源的跨平臺的專案管理工具,主要服務基於java平臺的專案構建、依賴管理和專案資訊管理。無論是小型的開源類庫專案,還是大型的企業級應用;無論是傳統的瀑布式開發,還是流行的敏捷模式,Maven都能大顯身手。
1.1 為什麼使用Maven
我們在軟體開發的過程中會發現,除了編寫原始碼,我們每天有相當一部分時間花在編譯,執行單元測試,生成文件,打包和部署等瑣碎且不起眼的工作上,這就是構建。如果我們手工這樣做,那時間成本太高了,因此大家開始用軟體的方法讓這些工作自動化。Maven的用途之一就是用於構建,它是一個強大的構建工具,可以幫我們自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署。我們不用一遍一遍的輸入命令,一次次點選滑鼠。我們只要用Maven配置好專案,然後輸入簡單的命令(如mvn clean install),Maven會幫我們處理那些繁瑣的任務。除此之外,Maven還有一個優點,在Maven之前,不同專案可能有不同的構建方式,但是有了Maven之後,所有專案的構建命令都是簡單一致的,這能幫助我們標準化構建過程,避免了不必要的學習成本,有利於專案團隊的標準化。
Maven除了是一個構建工具,還是一個依賴管理工具和專案資訊管理工具。它提供了中央倉庫,能幫我們自動下載構件。在現在的軟體發開過程中,不可避免會用到第三方的開源類庫,這些類庫都可以通過依賴的方式引入到專案中。隨著依賴的增多,版本不一致、版本衝突、依賴臃腫的方式接踵而來。手動解決這些問題是十分麻煩和枯燥的,幸運的是Maven能通過一個座標系統準確的定位每一個構件,讓類庫變得更有秩序。
Maven還有很多優點,更多詳細資訊可以參考文章底部的連結。
2 Maven的安裝和配置(只包括windows的安裝)
2.1 檢查JDK安裝
在windows命令列中輸入%JAVA_HOME%和java -version,檢查環境變數JAVA_HOME是否指向正確的JDK目錄,以及安裝的JDK版本。
2.2 安裝和配置Maven
到Maven官網(http://maven.apache.org/download.cgi)下載Maven的安裝包,並將壓縮包解壓到目錄中(我的Maven安裝目錄是D:\maven\apache-maven-3.5.4),接著將Maven安裝配置到系統環境中。方法類似JDK的環境配置,建立一個變數名為%M2_HOME%,變數值為Maven的安裝目錄。再到path的變數,在變數值末尾加入%M2_HOME%\bin。至此,環境變數就設定完成了。可以在命令列輸入echo %M2_HOME%和mvn -v檢測安裝配置是否成功。
3 Maven入門
到現在為止,我們可以開始使用Maven了,在此之前,我們要先建立一個Maven專案(具體流程可以參考:https://blog.csdn.net/chenzz2560/article/details/83270232)
3.1 編寫POM
Maven的核心檔案是pom.xml,POM定義了專案的基本資訊,用於描述專案如何構建,宣告專案依賴,等等。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>aaa</groupId>
<artifactId>aaa</artifactId>
<version>1.0-SNAPSHOT</version>
<name>projectName</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
第一行是XML頭,指定了該xml檔案的版本和編碼方式。接著是project元素,這是所有pom.xml的根元素,聲明瞭一些POM相關的名稱空間及xsd元素,雖然這些屬性不是必須的,但是用這些屬效能讓第三方工具幫助我們快速編譯POM。
根元素下的第一個子元素modelVersion只動了當前POM模型的版本,對於Maven2及Maven3來說,只能是4.0.0.
這段程式碼中最重要的是包含groupId,artifactId和version的三行。這三個元素定義了一個專案的基本座標。在Maven中,任何的jar,pom,或者war都是以基於這些基本座標來區分的。