讓我們先回顧下本系列的前3篇部落格:
1.為什麼要使用Maven?
之前我們新建的專案,專案所要依賴的第三方jar包都在專案的類路徑下(通常為lib目錄),如下所示:
使用這種方式,我們無法知道第三方類庫的依賴關係,比如匯入一個特定的jar包時,可能此jar包還依賴於其他的jar包,其他的jar包又依賴於更多的jar包,這也是我們平常遇到的ClassNotFound異常的主要原因。
為了解決這個問題,我們急需引入一個專案構建工具。目前主流的專案構建工具有:Ant、Maven、Gradle等。這裡我們選擇Maven作為專案構建工具。
2.Maven簡介
Apache Maven是一個軟體專案管理工具。基於專案物件模型(Project Object Model,POM)的概念,Maven可用來管理專案的依賴、編譯、文件等資訊。
使用Maven管理專案時,專案依賴的jar包將不再包含在專案內,而是集中放置在使用者目錄下的.m2資料夾下。
3.Maven安裝
3.1下載Maven
3.2安裝Maven
將下載好的apache-maven-3.6.0-bin.zip解壓到自己喜歡的目錄,我這邊解壓的目錄為:E:\Program Files\apache-maven-3.6.0。
3.3配置環境變數
環境變數彈窗開啟方式:計算機--屬性--高階系統設定--“高階”選項卡--環境變數。
1)新建系統環境變數MAVEN_HOME,值為:E:\Program Files\apache-maven-3.6.0(步驟2中解壓的目錄)
2)編輯系統變數Path,在最後增加:;%MAVEN_HOME%\bin
3.4驗證配置是否成功
開啟cmd視窗,執行命令:mvn -version,如果能夠正確的提示如下的版本資訊,說明Maven配置成功。
3.5修改Maven配置檔案
開啟maven下conf資料夾下的settings.xml檔案,找到localRepository節點,配置本地Repository路徑,我這裡配置的是:E:\Java\MavenRepository。
<localRepository>E:/Java/MavenRepository</localRepository>
注意:檔案中的路徑和Windows下的路徑不一樣,拷貝過來後要將\替換為/,而且不能包含中文。
3.6IDEA 配置Maven
開啟IDE後,依次開啟File--Settings,然後按照如下圖所示配置Maven:
注意:該設定僅針對當前專案。
4.Maven的pom檔案
因為Maven是基於專案物件模型(Project Object Model,POM)的概念運作的,所以Maven的專案都有一個pom.xml用來管理專案的依賴以及專案的編譯等功能。
4.1dependencies元素
<dependencies>
</dependencies>
此元素包含多個專案依賴需要使用的<dependency></dependency>
。
4.2dependency元素
<dependency></dependency>
內部通過groupId、artifactId、version確定唯一的依賴,可以稱這3個為座標:
groupId:組織的唯一標識。
artifactId:專案的唯一標識。
version:專案的版本。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
4.3properties元素
<properties></properties>
可定義變數在dependency中引用,程式碼如下:
<properties>
<java.version>1.8</java.version>
<spring-framework.version>4.3.18.RELEASE</spring-framework.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
4.4編譯外掛
Maven提供了編譯外掛,可在編譯外掛中涉及Java的編譯級別,程式碼如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
4.5Maven運作方式
Maven會自動根據dependency中的依賴配置,直接通過網際網路在Maven中心庫(https://mvnrepository.com/)下載相關依賴包到本地Maven庫,本地Maven庫預設是使用者目錄的.m2目錄,但上面我們已經把本地Maven庫修改為了:E:\Java\MavenRepository。
如果你不知道你所依賴的jar包的dependency怎麼寫的話,推薦到https://mvnrepository.com/網站檢索。
5.使用Maven管理Spring專案
5.1專案新增Maven依賴
在IDEA中,選中專案根目錄,依次點選右鍵-->Add Framework Support,然後在彈出的介面中選中Maven:
此時專案目錄下,會新生成一個pom.xml檔案,原始內容如下:
<?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>groupId</groupId>
<artifactId>spring-action</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
5.2配置檔案遷移
將之前的spring-config.xml配置檔案遷移至src/main/resources目錄下。
5.3pom檔案新增jar包依賴
開啟File-->Project Structure-->Modules,將之前方式引入的第三方jar包刪除:
然後通過pom檔案新增jar包依賴:
<dependencies>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.github.stefanbirkner</groupId>
<artifactId>system-rules</artifactId>
<version>1.16.0</version>
</dependency>
</dependencies>
修改完pom檔案記得點選“Import Changes”:
匯入完成後的專案結構圖為:
可以看出和之前的區別,現在的jar包都由Maven來管理,也可以檢視專案的依賴樹:
5.4最終的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>com.zwwhnly</groupId>
<artifactId>spring-action</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<spring-framework.version>4.3.18.RELEASE</spring-framework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>com.github.stefanbirkner</groupId>
<artifactId>system-rules</artifactId>
<version>1.16.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
上面講解的方式適用於新建專案時不是Maven專案,後續轉為Maven專案的操作步驟。
其實,我們可以通過IDEA,直接新建Maven專案,然後修改pom檔案為以上內容引入Spring等依賴(推薦該方式):
6.參考
《Java EE開發的顛覆者:Spring Boot實戰》
7.原始碼
原始碼地址:https://github.com/zwwhnly/spring-action.git,歡迎下載。