摘要:利用上一篇文章所生成的 HelloWorld 程序,介紹 Spring Boot 的文檔結構、POM 文件格式,以及如何在 JetBrains IntelliJ IDEA 工具中使用 Maven。
在 Apache Maven 出現之前,Java 程序員可能按自己的喜好來定義程序的目錄結構,這樣造成的結果是:不同的開發人員、不同項目之間,程序的文件結構可能差異比較大,甚至配置文件的命名和放置位置,可能都差異甚大。而 Maven 則對程序結構做了規范約定,因此不管是哪個開發團隊、那個項目,只要是用 Maven 來管理的,它們的目錄結構基本上是一致的。這樣的好處很多,減免混亂,減少開發人員之間的溝通和研究,當然也減少了出錯的機會。
1、Maven 的代碼結構
現在看我們上一篇文章所生成 HelloWorld 程序的框架代碼的目錄結構。
【圖 2-1 代碼框架目錄結構】
這里有一些 IDEA 所獨有的文件我們可以忽略它,如:.idea 目錄、.mvn 目錄、.gitignore、HELP.md。重點關注下面這些文件和目錄:
src 目錄:與源代碼相關的所有文件放這里。
target 目錄:上圖沒有顯示此目錄,因為還沒有編譯程序,Maven 編譯程序后,把編譯出來的所以相關文件都放在 target 目錄。
src\main 目錄:存放程序的主體文件,包括源代碼和資源文件,如配置文件、圖片等。
src\main\java:顧名思義,這里是放 Java 源代碼。
src\main\Resources:放各種配置文件,如 XML 文件,Properties 文件、視圖、靜態圖片等。
src\test 目錄:存放測試相關的文件
src\test\java:存放單元測試的 Java 源代碼
src\test\Resources:存放單元測試相關的各種配置文件。
HelloWorld.iml,這是 IntelliJ IDEA 的模塊文件,存儲了有關的開發模塊。
上圖中最后一個文件 pom.xml 是非常重要的文件,POM 是 Project Object Model 的首字母簡寫,代表“項目對象模型”,它是一個 Maven 項目的 XML 表示,該 Maven 項目保存在一個名為 pom.xml 的文件中。 Maven 站在哲學意義的高度去看待項目,認為項目不僅僅只是包含代碼的文件集合。 一個項目包含以下這一切內容:配置文件,所涉及的開發人員和他們所扮演的角色,缺陷跟蹤系統,組織和許可,項目所在的URL,項目的依賴關系,以及所有其它在代碼生命周期中起作用的部件。 POM 就像是一個有關項目的一站式商店。事實上,在 Maven 的世界中,項目根本不需要包含任何代碼,而只需要一個pom.xml。
2、pom.xml 的內容解釋
現在,我們就來看我們項目中的這個 pom.xml 的內容。
【圖 2-2 pom.xml 的內容】
這是一個 XML 文件,代碼的首行是 XML 頭,指定此 XML 文件的版本號和編碼方式,版本是 1.0,編碼方式為 UTF-8。
接下來是 project 元素,它是此文檔的根節點,它還聲明了一些 POM 相關的命名空間及 xsd 元素
根元素下的第一個子元素 modelVersion 指定了當前 POM 模型的版本為 4.0.0。
接下來是 parent 元素,它定義了此項目所繼承的項目,其下有三個主要的節點,groupId、artifactId、version,此三元素簡稱 GAV,是項目基本的坐標。在 Maven 中,任何的 pom、jar、war 都是以 GAV 坐標來定位和區分的。
groupId 定義了項目所屬的組,如公司或組織中的某一個團隊小組,例如 parent 元素里的 groupId org.springframework.boot 可以簡單理解為 “org.springframework” 代表一個組織,“boot ” 代表是該組織下面的 Spring Boot 小組。
artifactId 定義了項目在組(groupId)中唯一的 ID,一個組(groupId)下面可能有很多項目,這不同的項目用 artifactId 來區分。Spring Boot 下面有很多項目,此處,我們用到的是“spring-boot-starter-parent”。
從這里也可以看出 Spring 的命名規范,groupId 用 “.” 分割,artifactId 用 “-” 分割。
version 則是版本號。
parent 元素后面又重新出現了 GAV,這次的 GAV 才是本項目的坐標。
這里的默認生成的版本號是 0.0.1-SNAPSHOT,SNAPSHOT 表示開發中的版本,以后若正式發布時才把 SNAPSHOT 給去掉。
接下來 name 元素聲明了一個對於用戶更為友好的項目名稱,盡管它不是必須的,但還是建議為每個項目聲明 name 以方便信息交流。
description 是項目的詳細描述。
properties 定義項目的一些屬性,這里有一個子標簽 java.version 把編譯運行的 Java 版本定義為 11。
接下來 dependencies 元素是重點。一般來說,一個 Java 程序會運用到很多 jar,現在這些 jar 都放在 Maven 倉庫中,項目就在 dependenies 元素中定義這些 jar 的 GAV 坐標。當編譯的時候,Maven 會自動將所引用到 jar 下載下來。項目的依賴,就在這里定義。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我們仔細看其中一項 dependency,說好的 GAV 三維坐標,現在怎么只有 GA 二維呢, Version 這一維哪里去了?
回頭看我們前面定義的 parent 元素,它的 version 是 2.5.3,那么在 dependencies 中定義的依賴如果沒有提供 version,就會用 parent 的 version。Parent 本來就是被用來繼承的,所以在 dependencies 中定義的幾個 Spring Boot 的相關依賴,都是用的 version 2.5.3,並且避免了重復,不用在每一項依賴中都重復 version 為 2.5.3。其實也好理解,我們用的是同一個 Spring Boot 版本,讓我寫一次版本號就好了嘛,不要讓我重復寫。
最后一個是 build (編譯屬性設置)下面的 plugin 插件。在 Maven 是世界中,一切功能都是插件,Spring Boot 給 Maven 開發了一個插件 spring-boot-maven-plugin,這個項目中把它引進來,就可以執行 Maven 命令來啟動 Spring Boot 程序,命令如下 (注意冒號前后不要有空格):
mvn spring-boot:run
在命令行模式下,進入 pom.xml 所在目錄,執行命令“mvn spring-boot:run "后,mvn 會運行次程序,並啟動 Tomcat。
3、IDEA 下 使用 Maven
JetBrains IntelliJ IDEA 中如何使用 Maven 的工具呢?我們先來配置一下 Maven。
首先,安裝 Maven 很簡單,去官方把 Maven 包下載下來,然后解壓都某個本地目錄即可,如本人解壓在 D:\JavaTools\apache-maven-3.6.3 。
點擊 File | Settings...,或者按快捷鍵 Ctrl + Atl + S 打開“設置”窗口。
在如下設置窗口中選擇 Build, Execution, Deployment | Build Tools | Maven
設置 Maven Home Path 為自己的 Maven 安裝目錄,如本人的 D:\JavaTools\apache-maven-3.6.3 。
User settings files 是 Maven 的配置文件。
Local repository 是 Maven 的本地存儲目錄,從遠程倉庫中下載下來的各種 pom、jar、war 等文件會存儲在這里。
上面這些准備工作都做好之后,我們可以正式在 IDEA 中使用 Maven 了。
一旦 IDEA 打開了一個 Maven 項目,點擊最右側的 “Maven” 字符來打開或關閉 Maven 面板。打開面板后,在項目名稱(這里是HelloWorld)| Lifecycle 可以看到 Maven 的功能列表。
一般常用到的是圈起來的 clean、package、install。
clean:清空本地的編譯信息。
package:把編譯的結果打包成 jar、war 等。
install:執行編譯,然后發布到本地 Maven 倉庫,其它項目若需要可以拉取。
飛仙寫的第二篇 Spring Boot 就到這里停筆,之后飛仙會繼續寫 Spring Boot 。
技術不會辜負人,只有人辜負了技術;
青春不會辜負人,只有人辜負了青春;
歲月不會辜負人,只有人辜負了歲月。
Enjoy Coding.