- 川哥教你Spring Boot 2實戰
- 李世川編著
- 1293字
- 2024-12-27 21:15:27
1.6 Maven POM文件介紹
筆者之前寫過一本書,由于Jar包管理工具還不成熟,需要手動加入Jar包,現在Maven已經很成熟,并被廣泛應用,其作為管理Jar工具包很方便,當然還有其他的一些管理Jar工具,比如Ant和Gradle。本書主要使用Maven構建工具,故在這里有必要用一節進行講解。
Maven是Java世界中構建工具之一,可以通過一小段描述信息來管理項目的構建。構建軟件項目主要包括以下任務:下載依賴項,并在類路徑上放置其他Jar,將源代碼編譯為二進制代碼,運行測試,然后將編譯后的代碼打包成可部署的工件(如JAR、WAR和ZIP文件),以及部署這些工件到應用程序服務器或存儲庫。Maven能自動執行這些任務,最大限度地降低人工在手動構建軟件時出錯的可能,并將編譯和打包代碼的工作與代碼構造分開。Maven主要功能有依賴管理系統、多模塊構建、一致的項目結構、一致的構建模型和插件機制。
Maven項目的配置是通過項目對象模型(POM)完成的,即用pom.xml文件表示。POM描述了項目、管理依賴項,并配置用于構建軟件的插件。正如前面示例中pom文件展示。下面是Maven基本結構:

上面代碼列出的是POM基本結構,其中元素project是所有pom.xml的根元素,它還聲明了一些POM相關的命名空間及xsd元素等。
· modelVersion:用于描述POM模型的版本;
· groupId:用于描述創建項目所屬公司或組唯一基本名稱。這個名稱應該和項目所在的組織或公司存在關聯,定義方法一般都是網址倒序,例如com.zioer;
· artifactId:用于描述當前項目的唯一名稱;
· version:描述當前項目的版本,SNAPSHOT意為快照,說明該項目還處在開發中,還有其他一些元素沒有自動生成,比如下面元素;
· Packaging:用于描述打包方式,比如war、jar或zip等;
· Name:用于描述一個對于用戶更為友好的項目名稱;
· URL:用于描述項目的主頁。
其中,groupId、artifactId和version組合在一起便形成唯一標識符,其是指定項目將使用哪些外部庫版本的原理。
Maven的依賴管理是重點,項目無需在本地管理這些依賴,而是需要時從中央存儲倉庫中自動下載,那么在實際中,這就是依賴,需要提供groupId、artifactId和庫的版本。下面是示例:

Maven在處理依賴項時,它會將Spring Core庫中指定版本下載到本地Maven存儲庫中,并在項目中引用。如果在依賴中沒有指定版本,則會下載最新版本。
在pom.xml中,可以使用元素properties來管理各依賴的版本,有助于文檔的閱讀,比如下面示例:

這樣,當有多個地方用到同一個元素spring.version時,只需要引用該元素即可,便于修改一處,達到統一修改的目的。
在POM文件中,一個重要的元素是build,其提供了Maven目標、已編譯項目的目錄以及應用程序的最終名稱的描述。基本形式如以下代碼所示:

在上面代碼中,元素介紹如下:
· defaultGoal:執行build任務時,如果沒有指定目標,將使用的默認值;
· directory:用于描述build目標文件的存放目錄,默認在${basedir}/target目錄;
· finalName:build目標文件的名稱,默認為${artifactId}-${version};
· filters:定義?.properties文件,包含一個properties列表,該列表會應用到支持filter的resources中。
在POM文件中,另一個重要特性是它對配置文件的支持,即元素profiles,包含了一組配置值。通過使用配置文件,可以為不同的環境(如生產/測試/開發)自定義構建,基本形式如以下代碼所示:

以上介紹POM文件的基本構成,并能根據項目實際構建需要的POM文件,Maven重在解決Jar包依賴,并為項目中Jar包版本升級、測試、打包等提供方便,更重要的是,開發人員只需要關注項目具體本身,不再需要為其各種依賴所干擾。
- Advanced Splunk
- Facebook Application Development with Graph API Cookbook
- 大學計算機基礎實驗教程
- INSTANT Sencha Touch
- Bootstrap 4:Responsive Web Design
- Hands-On Automation Testing with Java for Beginners
- Mastering Xamarin.Forms(Second Edition)
- Everyday Data Structures
- Arduino電子設計實戰指南:零基礎篇
- 多媒體技術及應用
- 會當凌絕頂:Java開發修行實錄
- 從零開始構建深度前饋神經網絡:Python+TensorFlow 2.x
- micro:bit軟件指南
- Java性能權威指南
- Boost.Asio C++ Network Programming Cookbook