文章目錄
- 1.Maven
- 1.1什么是Maven
- 1.2Maven的好處
- 1.3使用idea創建一個Maven項目
- 1.4Maven的核心功能
- 1.4.1項目構建
- 1.5Maven倉庫
- 1.5.2 中央倉庫
- 1.5.3 私有服務器(私服)
- 1.6Maven設置國內源
1.Maven
1.1什么是Maven
官方對于Maven的描述:
Apache Maven is a software project management and comprehension tool.
Based on theconcept of a project object model (POM), Maven can manage
a project’s build, reporting anddocumentation from a central piece
ofinformation.
即Maven是一個項目管理工具。基于POM(project Object
Model,項目對象模型)的概念,Maven可以通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具
也就是說,Maven就是一個項目管理工具,通過pow.xml文件的配置獲取jar包,而不是之前的手動添加jar包
1.2Maven的好處
就是為了簡單,方便,提高開發效率,減少開發bug
1.3使用idea創建一個Maven項目
1.4Maven的核心功能
主要體現在兩個方面
1.4.1項目構建
Maven為我們提供了一套簡單命令來完成項目的構建
就比如常見的打jar包操作,點擊package就能完成項目的打包操作
1.4.2 依賴管理
依賴配置
使用Maven后,我我們不再手動添加jar包,而是通過pom.xml文件的配置獲取jar包,這里的jar包實際上就是依賴
就比如使用javaFx,我們需要手動將javaFX的包下載下來,添加到項目里面
但是如果使用Maven,我們只需要在pom.xml中引入javaFx的依賴即可
<dependencies><!--里面添加項目的依賴坐標,可以是多個--></dependencies>
如果要添加javaFx依賴,那就是
<dependencies><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-graphics --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-graphics</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-base</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-fxml</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-swing --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-swing</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-web</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-media --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-media</artifactId><version>17.0.11</version></dependency>
</dependencies>
注意:對pow文件的任意改動都要點擊刷新按鈕,特別是引入新的jar包
此時就能看到新加入的jar包
依賴傳遞
在導入某些jar包的時候,可能某些jar包同時也引用了其他的jar包,那么就需要將所有的jar包都復制到項目底下
如果我們不使用Maven,那么就需要知道每個庫都依賴哪些庫,以及這些庫之間的關系是什么樣的,就比較復雜
但是如果使用Maven,就可以避免管理依賴之間的關系,只需要在pom文件中直接定義依賴即可,由于maven的依賴具有傳遞性,就會自動將這個依賴所依賴的其他jar包一起導入
如圖所示,項目A通過Maven引入jarA時,就會自動引入jarB和jarC
此時jarA和項目B就是項目A的直接依賴
jarB和jarC是間接依賴
依賴排除
如上圖所示,如果項目A不需要jarB,也可以通過排除依賴的方式來實現
排除依賴即主動斷開依賴(被排除的資源無需指定版本)
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.0.6</version><!--排除依賴--><exclusions><exclusion><artifactId>spring-jcl</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency>
</dependencies>
我們也可以通過插件更方便的解決這類問題
在這個頁面就可以直接排除依賴
依賴調解
當項?中的依賴存在依賴沖突時
Maven會采?最短路徑優先的原則去選擇依賴
1.5Maven倉庫
前面講過,使用maven,我們只需要在pom文件里面,通過短短幾行代碼就能將依賴的jar包導進項目里面,那么是怎么做到的呢?
<dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>17.0.11</version></dependency>
這幾行代碼就稱為"坐標",是唯一的
實際上在Maven里,就是通過groupId,artifactId,version的配置,來唯一識別一個jar包,這三者缺一不可
當我們在pom?件中配置完依賴之后, 點擊刷新, Maven會根據坐標的配置, 去倉庫?尋找Jar包, 并把他 下載下來, 添加到項?中. 這個Jar包下載的地?就稱為倉庫.
Maven倉庫分為兩大類:本地倉庫和遠程倉庫
1.5.1 本地倉庫
是自己計算機上對應的一個目錄,首先會查找本地倉庫里面是否有對應的jar包
當項目中引入對應的依賴之后,首先會查找本地倉庫里面是否有讓對應的jar包
如果有的話就直接引用,沒有的話則去中央倉庫下載對應的jar包到本地倉庫
本地倉庫地址可以通過Maven配置查看
1.5.2 中央倉庫
中央倉庫: maven 軟件中內置?個遠程倉庫地址,就是中央倉庫,服務于整個互聯?. 由 Maven 團隊 維護,全球唯?.
倉庫地址:https://repo1.maven.org/maven2
可以通過https://mvnrepository.com 這個?站來查詢并下載
1.5.3 私有服務器(私服)
私服: ?般由公司團隊搭建的私有倉庫.
私服屬于某個公司,或者某個部?, 往往需要?定權限.
有了私服之后, Maven依賴下載的順序就發生了變化
(1)先從本地倉庫獲取, 本地倉庫存在, 則直接返回
(2) 如果本地倉庫沒有, 就從私服請求, 私服存在該資源, 就直接返回
(3) 如果私服上不存在該資源,則從中央倉庫下載, 中央倉庫不存在, 就報錯了
(4) 如果中央倉庫中存在, 就先緩存在私服上之后,再緩存到本地倉庫?, 再為Maven的下載請求提供服務
1.6Maven設置國內源
因為中央倉庫在國外,因此訪問下載起來會比較慢,因此我們設置國內源
修改Maven的配置文件在本文資源直接下載即可
將此文件覆蓋在此路徑