Spring入門(四):使用Maven管理Spring項目


1. 為什么要使用Maven?

之前我們新建的項目,項目所要依賴的第三方jar包都在項目的類路徑下(通常為lib目錄),如下所示:

使用這種方式,我們無法知道第三方類庫的依賴關系,比如導入一個特定的jar包時,可能此jar包還依賴於其他的jar包,其他的jar包又依賴於更多的jar包,這也是我們平常遇到的ClassNotFound異常的主要原因。

為了解決這個問題,我們急需引入一個項目構建工具。目前主流的項目構建工具有:Maven、Gradle等。

這里我們選擇Maven作為項目構建工具。

2. Maven簡介

Apache Maven是一個軟件項目管理工具。

基於項目對象模型(Project Object Model,POM)的概念,Maven可用來管理項目的依賴、編譯、文檔等信息。

使用Maven管理項目時,項目依賴的jar包將不再包含在項目內,默認情況下集中放置在用戶目錄下的.m2文件夾下,不過這個路徑可以自定義成自己喜歡的目錄。

3. Maven安裝

3.1 下載Maven

下載地址:http://maven.apache.org/

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.6 IDEA 配置Maven

打開IDEA后,依次打開File--Settings,然后按照如下圖所示配置Maven:

注意:該設置僅針對當前項目。

4. Maven的pom文件

因為Maven是基於項目對象模型(Project Object Model,POM)的概念運作的,所以Maven的項目都有一個pom.xml文件用來管理項目的依賴以及項目的編譯等功能。

4.1 dependencies元素

<dependencies>
</dependencies>

此元素包含項目需要依賴使用的多個<dependency></dependency>

4.2 dependency元素

<dependency></dependency>內部通過groupId、artifactId、version確定唯一的依賴,可以稱這3個為坐標。

groupId:組織的唯一標識。

artifactId:項目的唯一標識。

version:項目的版本。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

4.3 properties元素

<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.5 Maven運作方式

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>

這里,我將groupId的值修改成自己域名:com.zwwhnly。

<groupId>com.zwwhnly</groupId>
<artifactId>spring-action</artifactId>
<version>1.0-SNAPSHOT</version>

5.2 配置文件遷移

將之前的spring-config.xml配置文件遷移至src/main/resources目錄下。

5.3 pom文件添加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. 源碼及參考

源碼地址:https://github.com/zwwhnly/spring-action.git,歡迎下載。

使用IntelliJ IDEA 配置Maven(入門)

[Java] Maven 安裝和配置

用IDEA將普通Web項目轉Maven項目

汪雲飛《Java EE開發的顛覆者:Spring Boot實戰》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM