maven 父maven_Maven神秘化
maven 父maven
由于我的Android開發的背景下,我比較習慣到Gradle ,而不是Maven的 。 盡管我知道Gradle基于Maven,但我從未調查過幕后發生的事情。 在過去的一周中,我一直在嘗試了解細節并找出Maven的不同組成部分。
什么是Maven
Maven是主要用于Java項目的構建和依賴關系管理系統。
主要功能包括:
- 通過原型創建新項目。
- POM文件和設置文件中的項目配置
- 使用生命周期 , 階段 , 插件 , 目標和構建配置文件進行項目構建 。
- 通過存儲庫進行依賴管理
- 使用發布插件進行部署。
項目對象模型
項目對象模型或POM是Maven中的基本工作單元。 這是一個XML文件,通常在項目根目錄中定義,其中包含有關項目的信息以及Maven用于構建項目的配置 。
可以包含在POM文件中的配置如下:
- 插件和目標
- 依存關系
- 儲存庫
- 構建配置文件
- 項目元數據,例如版本,描述,開發人員等。
為了簡化所有項目的默認配置,Maven提供了所謂的Super POM 。 超級POM是Maven的默認POM。 所有POM都擴展了Super Pom,從而繼承了Super POM中指定的配置。
設置文件
如上所述,POM文件包含項目配置,而Settings文件包含用戶特定的配置。 可以有兩個設置文件,位于Maven安裝目錄中的全局設置文件和位于用戶主目錄中的用戶設置文件。
設置文件可以提供以下配置:
- 簡單的價值觀
- 插件組
- 服務器憑證
- 代理人
- 個人資料
建立生命周期
Maven構建過程基于生命周期 。 生命周期為構建和分發項目工件提供了明確定義的過程。
Maven中有三個不同的生命周期。
- 默認值:處理項目的構建和部署。
- 清潔:處理項目清潔。
- 網站:處理項目的網站文檔。
相數
每個生命周期由一系列稱為build phases的階段定義。 構建階段負責生命周期中的特定步驟,但是其執行職責的方式取決于綁定到該階段的插件目標。
外掛程式
插件是為構建階段提供目標的構件。 插件將階段劃分為目標,使構建過程真正靈活且可定制。
插件可以提供一個或多個目標。 每個目標都代表該插件的功能。
例如,Maven僅支持項目的單個源和測試目錄。 如果我們決定向項目添加其他目錄,則可以使用提供目標的插件,以將源目錄和測試目錄添加到構建過程中。
目標
目標負責在每個階段執行特定任務。
有些階段具有默認目標。 對于默認生命周期,默認選項由在項目的POM文件中定義的包裝選項提供。
除了默認目標外,還可以通過在項目的POM文件中配置插件來定義其他目標。 因此,一個特定的構建階段可以由多個目標組成。 如果一個階段沒有任何目標,則不會將其作為生命周期的一部分執行。
獨立插件
大多數插件都提供了綁定到構建階段的目標。 但是,有些插件提供的目標應單獨執行,而不是作為構建生命周期的一部分。
原型插件
如果您恰好是IntelliJ用戶,則可能已經看到,在創建新的Maven項目時,第一個選項是原型列表。 您是否想知道它的用途是什么? 我不得不說,直到我通過挖掘Maven功能找到了原型之后,我才開始。
原型只是現有的項目模板。 Archetype插件提供了Maven項目模板。 它基于標準模板創建項目結構和POM文件。 通過僅提供項目特定的配置(例如groupid,工件名稱等),以交互方式完成創建新項目的過程。
它有助于應用項目或組織的最佳實踐。 新用戶可以在幾秒鐘內擁有一個可以用作步行骨架的工作項目。
該插件具有附加支持,這意味著可以用于向現有項目中添加片段,即Maven站點原型可以快速創建該項目的文檔站點。
用戶可以在組織的存儲庫中創建自己的原型,并將其用作新項目的基礎。
作為獨立的插件,原型插件提供了不受任何生命周期約束的目標。 目標是直接執行的,與使用生命周期時執行的操作相反,在生命周期中,目標是生命周期階段的一部分。
發布插件
提供發布項目工件的標準機制。
Release插件有兩個主要目標。
準備
執行
儲存庫
Maven使用存儲庫來保存構建工件和依賴項。
Maven 存儲庫與Git中一樣使用,但是存儲構建和依賴項目而不是源代碼。 這樣做,用戶可以輕松地從存儲庫中消耗您的項目工件。
local和remote存儲庫有兩種類型,兩者的存儲結構相同。 本地存儲庫位于用戶的本地計算機中,并用作遠程存儲庫的緩存,提供了脫機構建功能。 遠程存儲庫可以分為兩個子組,即public和internal 。 公共存儲庫擁有可公開獲取的工件,而內部存儲庫是在組織中創建的,以在開發團隊之間共享內部工件。
強烈建議使用Maven時,依賴項JAR不應存儲在源代碼管理中,而是存儲在存儲庫中。 這樣做,Maven能夠處理傳遞依賴關系,因為所有依賴關系信息都可以通過POM文件和Maven存儲庫獲得。
構建配置文件
Maven 構建配置文件用于促進可移植構建。 構建配置文件會在構建時修改POM文件,以提供與環境有關的等效但有區別的參數。 例如,這是定義每個用戶不同的文件系統引用的理想場所。
概要文件提供了可以在POM文件中引用的屬性。 這些屬性在配置文件聲明的<properties>部分中定義。
可以在POM文件中,根據每個項目定義或在Settings文件中聲明構建配置文件。 全局設置文件中定義的構建配置文件可用于機器的所有用戶,而用戶設置文件中定義的配置文件僅可用于特定用戶。
配置文件以不同的方式觸發:
- 明確地:通過命令行(包括-P選項)運行Maven構建。
- Maven設置:在<active profiles>部分中包含配置<active profiles> 。 使用此選項時,配置文件始終處于活動狀態。
- 配置文件聲明中的<activation>部分:激活部分可以根據環境變量,操作系統設置以及丟失或存在的文件來激活某個配置文件。
結論
Maven可以在許多方面減輕開發工作的負擔:
- 輕松構建過程
- 統一構建系統
- 豐富的項目信息
- 最佳發展準則
- 透明遷移到新功能
我意識到直到最近我才知道有多少Maven功能,因此我邀請您自己檢查它們。 你不會失望的。
翻譯自: https://www.javacodegeeks.com/2016/08/maven-demystified.html
maven 父maven
總結
以上是生活随笔為你收集整理的maven 父maven_Maven神秘化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称苹果计划将其在印度的生产规模扩大5
- 下一篇: lucene学习笔记_学习Lucene