柚子快報邀請碼778899分享:java Maven講解
柚子快報邀請碼778899分享:java Maven講解
介紹
Maven是一個流行的構(gòu)建工具和項目管理工具,它主要用于Java項目的構(gòu)建、依賴管理和項目報告生成。Maven通過提供一致的項目結(jié)構(gòu)、自動化的構(gòu)建過程和強大的依賴管理,簡化了項目的開發(fā)和維護過程。
下面是一些Maven的主要特點和用途:
項目結(jié)構(gòu)管理:Maven規(guī)定了一種標準的項目目錄結(jié)構(gòu),使得項目的組織和管理更加統(tǒng)一和規(guī)范化。這樣可以方便開發(fā)者共享項目,并且降低新成員加入項目的學(xué)習(xí)成本。 構(gòu)建工具:Maven可以自動化執(zhí)行項目的構(gòu)建過程,包括編譯源代碼、運行測試、打包、部署等。通過定義項目的構(gòu)建生命周期和插件,Maven可以輕松執(zhí)行這些任務(wù),提高開發(fā)效率。 依賴管理:Maven提供了強大的依賴管理功能,可以自動下載和管理項目所依賴的第三方庫和框架。通過在項目配置文件(pom.xml)中定義依賴關(guān)系,Maven可以自動解析、下載和導(dǎo)入所需的依賴項,大大簡化了項目的依賴管理。 插件系統(tǒng):Maven支持豐富的插件系統(tǒng),可以通過插件擴展和定制構(gòu)建過程。開發(fā)者可以使用已有的插件或編寫自己的插件,以滿足特定的項目需求。 跨平臺支持:Maven是基于Java開發(fā)的,因此可以在多個操作系統(tǒng)上運行,并且能夠管理不同類型的項目,而不僅僅局限于Java項目。
簡單來說maven就是一個軟件,這個軟件的作用就是幫助你快速構(gòu)建你的Java項目 幫助你更好的管理和構(gòu)建依賴,還有一個非常好的好處就是說,當我們使用idea編寫時 不借助maven的情況下 文件的目錄結(jié)構(gòu)和eclipse是不同的 ,這就導(dǎo)致使用不同版本的代碼時,我們會需要下載不同編譯器來構(gòu)建對應(yīng)的項目,而maven成功解決了這個問題,只要保證配置沒有問題 ,那么可以直接進行編寫程序和運行程序。
使用maven的好處
maven可以幫助快速打包項目 比如說將一個web項目打包成jar/war之后放到服務(wù)器中。(可以直接使用命令來打包成指定的格式 maven package)依賴管理:可以管理項目的依賴 ,自動下載所需的依賴庫,并且保證版本沒有沖突,依賴版本管理。構(gòu)建管理:maven可以幫助管理項目的編譯,測試,打包,部署等過程,通過實現(xiàn)標準的構(gòu)建生命周期,maven可以確保每一個構(gòu)建過程遵循同樣的規(guī)則和最佳實踐。
maven標簽的規(guī)定
遵循GAV的規(guī)則: Maven標簽的規(guī)定主要遵循GAV(GroupID、ArtifactID、Version)的命名規(guī)則。具體規(guī)定如下:
GroupID
GroupID是項目的唯一標識符,通常采用反向域名的方式命名,以保證全球唯一性。根據(jù)Maven的規(guī)定,GroupID應(yīng)該由三部分組成:公司/BU名稱、業(yè)務(wù)線名稱、子業(yè)務(wù)線名稱。例如,com.example.project可以表示一個名稱為project的項目,它屬于example公司,業(yè)務(wù)線為project。
ArtifactID
ArtifactID是項目的名稱,它也必須是唯一的。ArtifactID通常是一個短名稱,用來描述項目或模塊的名稱。例如,如果項目名稱是myproject,則ArtifactID通常會是myproject。
Version
Version是項目的版本號,用于區(qū)分不同版本的項目。每次發(fā)布新版本時,Version都應(yīng)該被更新。版本號通常采用三位數(shù)字進行表示,例如1.0.0、1.1.0等。
maven怎么導(dǎo)入依賴呢?
我們使用jackson做一個例子 直接在pom.xml中進行配置 外層的dependencies標簽表明里面的都是依賴 可以把他理解成是一個依賴集合 內(nèi)層的一級標簽 dependency標識這是個依賴內(nèi)容 groupId項目唯一標識 artifactId項目名稱 version項目的版本信息 規(guī)定完成之后直接 重新加載項目
maven項目的一些特點
依賴傳遞:
依賴傳遞指的是當一個模塊或庫 A 依賴于另一個模塊或庫 B,而 B 又依賴于模塊或庫 C,那么A會間接依賴于 C。這種依賴傳遞結(jié)構(gòu)可以形成一個依賴樹。當我們引入一個庫或框架時,構(gòu)建工具(如 Maven、Gradle) 會自動解析和加載其所有的直接和間接依賴,確保這些依賴都可用。 依賴傳遞的作用是:
.減少重復(fù)依賴:當多個項目依賴同一個庫時,Maven 可以自動下載并且只下載一次該庫。這樣可以減少項目的構(gòu)建時間和磁盤空間。自動管理依賴: Maven 可以自動管理依賴項,使用依賴傳遞,簡化了依賴項的管理,使項目構(gòu)建更加可靠和一致。確保依賴版本正確性:通過依賴傳遞的依賴,之間都不會存在版本兼容性問題,確實依賴的版本正確性!
簡單的說依賴傳遞就是指,當某個項目A依賴于項目B,并且項目B又依賴于項目C時,依賴傳遞機制會自動將項目C的依賴項也引入到項目A中。這樣,項目A就可以直接使用項目B的功能,而不需要手動添加項目C的依賴。
也就是我寫了一個A項目 A項目需要用到B項目 當我下載A的時候也順帶下了關(guān)聯(lián)的B項目
依賴沖突
根據(jù)依賴傳遞的規(guī)定很容易發(fā)現(xiàn)一個bug那就是 也就是說A依賴于B B依賴于C 那么我們會發(fā)現(xiàn)一個現(xiàn)象 這就是一個死循環(huán)問題,A下載B ,B下載C, C下載A成為一個閉環(huán)問題。
依賴沖突的規(guī)定:發(fā)現(xiàn)已經(jīng)存在依賴(重復(fù)依賴) 會終止依賴傳遞!避免循環(huán)依賴和重復(fù)依賴的問題!
依賴沖突的原則
第一原則: 誰短誰優(yōu)先,引用路徑長度。 比如說: - 表示依賴 A-C-B(1.0) F-B(2.0) 最后的版本結(jié)果 A C F B(2.0)第二原則 誰上誰優(yōu)先!dependencies聲明的先后順序 A-B 1.0 F-B 2.0 最終結(jié)果 A-F-B 1.0
maven出現(xiàn)失敗的場景
本地倉庫被污染
當本地文件沒有這個依賴但是并不訪問阿里云中央倉庫 此時就要先刪除污染源 然后繼續(xù)請求 刪除掉本地maven倉庫緩存
擴建構(gòu)建管理和插件配置
使用命名來進行配置和處理
mvn clean:清理項目,刪除生成的目標文件和臨時文件。 mvn compile:編譯項目源代碼。 mvn package:將項目打包為可發(fā)布的格式,如JAR或WAR。 mvn install:將項目打包并安裝到本地Maven倉庫,以供其他項目引用。 mvn deploy:將項目打包并部署到遠程Maven倉庫,用于共享和分發(fā)。 mvn test:運行項目的測試用例。 mvn site:生成項目的文檔網(wǎng)站。 mvn dependency:tree:顯示項目的依賴樹,展示項目所依賴的庫及其版本。 mvn clean install:清理項目并進行完整的構(gòu)建,包括編譯、打包和安裝。 mvn clean package:清理項目并進行打包,生成可發(fā)布的包。
maven的繼承
在Maven中,繼承是一種機制,允許您在項目之間共享和重用構(gòu)建配置。Maven繼承的主要目的是減少重復(fù)性的配置,使得在多個項目中更容易維護和管理構(gòu)建過程。以下是Maven繼承的關(guān)鍵概念:
父項目(Parent Project:父項目是一個包含通用配置的Maven項目,它定義了項目的基本結(jié)構(gòu)、插件、依賴等信息。子項目可以繼承自一個父項目。
子項目(Child Project):子項目是繼承自父項目的項目。子項目可以繼承父項目的配置信息,也可以覆蓋或添加自己的配置。
繼承關(guān)系:繼承是通過在子項目的pom.xml文件中使用元素來實現(xiàn)的。子項目通過指定父項目的groupId、artifactId和version來建立繼承關(guān)系。
Copy code
這樣子項目就會繼承父項目的配置信息。 默認值的覆蓋:子項目可以覆蓋父項目的配置。例如,可以在子項目中重新定義插件的版本或添加新的插件,而無需重新定義整個插件配置。
繼承的優(yōu)點:
代碼重用:通過繼承,可以在多個項目中重用相同的構(gòu)建配置。 統(tǒng)一管理:父項目提供了一個集中管理和更新配置的地方,可以確保所有子項目保持一致。 減少冗余:避免在每個項目中重復(fù)相同的配置,減少維護成本。 多層次繼承:Maven支持多層次的繼承結(jié)構(gòu),即子項目可以再定義新的父項目,形成一個繼承鏈。這樣的結(jié)構(gòu)可以更靈活地組織項目。
柚子快報邀請碼778899分享:java Maven講解
文章來源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。