前言
Maven 是一個項目管理工具,可以對 Java 項目進行構建、依賴管理。
基本要求掌握
配置Maven環境直接查。
得會在IDEA創建Maven的java項目吧、會創建Maven的web項目吧、會創建多模塊項目吧。
得會配置插件pligin、依賴dependency吧
一、Maven四大特性
1、依賴管理系統
由于寫項目需要導入非常多jar包,由于版本依賴,需要下載指定版本并且需要后續升級版本,手動麻煩!
操作:在配置文件內寫好jar包的倉庫路徑、名稱、版本,他會自動把所有指定的jar包下載好。
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version>
</dependency>
坐標屬性:
groupId: 定義實際項目-公司名稱(jar包所在倉庫路徑);
artifactId:定義Maven模塊-項目名;
version:定義版本。
2、多模塊構建
在 Maven 中需要定義一個 parent POM 作為一組 module 的聚合 POM。?????????????????????????????????????? 在該 POM 中可用 <modules> 標簽定義一組子模塊。??????????????????????????????????????????????????????? ?????? ?????? parent POM 中的 build 配置以及依賴配置都會自動繼承給子模塊。
3、統一的項目結構
??????? 不同IDE項目結構不同,但是只要是Maven管理的項目,項目結構一致,避免不同IDE打開產生錯誤。
4、統一的構建模型和插件機制
通過插件(plugin)形式引入服務器
<plugin> <groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.25</version><configuration><scanIntervalSeconds>10</scanIntervalSeconds><contextPath>/test</contextPath></configuration>
</plugin>
二、Maven環境變量配置
mvn -v查看Maven版本,如果沒有配置,上網看教程安裝配置maven環境變量(Mac版)_ElenaYu的博客-CSDN博客
1、下載壓縮包到自己選定的文件夾
2、設置鏡像源、指定jar包倉庫路徑
3、編輯環境變量配置文件 重啟。成功
三、IDEA集成Maven環境
注意要全局配置Maven環境。如果僅僅是局部配置僅針對當前項目,新項目仍需重新配置。
① 你的 maven 安裝目錄。
② 你的 maven setting.xml 文件
③ 你的 maven 倉庫,所有下載的 jar 包都會緩存到這個文件夾。
四、Maven創建Java項目
1、創建new project 選擇Maven
?2、自定義項目名及目錄名
?3、項目存儲信息核對
顯示出src目錄結構需要等待一段時間。
4、往pom.xml文件寫入配置信息
5、手動創建目錄并標記
手動創建resources 【directory目錄】 此時此目錄為普通目錄。?????????????????????????????????????????????????????? Mark標記為resources root讓Maven識別為資源目錄
6、使用Maven命令處理項目
如編譯、打包為jar包供其他項目使用
五、Maven創建Web項目
與創建Java項目類似。
1、創建new project 選擇模板
?2、自定義項目名、目錄名
?3、項目存儲信息核對
?4、修改pom.xml配置信息
Webapp目錄存放資源 jsp頁面 html頁面等。
?1、刪除插件管理
(以下內容直接刪除)
<pluginManagement><plugins><plugin></plugin>
...</plugins>
</pluginManagement>
?2、添加服務器插件配置信息
普通Java項目只需要打包 或者編譯就可以;Web項目需要看見頁面,需要服務器支持,有jetty 和 Tomcat倆類任選一。使用服務器要去其官網下載對應的Maven插件,將服務器的插件配置文件粘貼上。
五、Maven倉庫
常下載的文件:jar包 & 插件
分類:
????????遠程倉庫 :中央倉庫(https://mvnrepository.com/? )、私服、其他公共庫
????????本地倉庫
Maven根據坐標尋找構件時,首先查看本地倉庫,有就用,沒有就遠程倉庫查找下載到本地倉庫。
私服也就是本局域網內的鏡像源。
六、Maven環境下構建多模塊項目
作用:精簡化項目
創建Java項目,注意勾選SDK版本
1、創建父模塊與子模塊
1、創建maven_parent模塊
?2、創建maven_dao模塊
1、在maven_parent基礎上創建模塊
?2、選擇模板
3、創建maven_service模塊
與創建maven_dao模塊一模一樣
4、創建maven_controller模塊
與創建maven_dao模塊只有一個區別:在選擇模版時選擇Webapp
2、設置模塊配置文件
設置jdk版本(1.8)、單元測試junit版本、刪除多余配置(<pluginManagement>插件管理所有內容)
3、設置模塊之間的依賴
controller模塊要依賴service模塊,service模塊要依賴dao模塊。即controller要調用service內方法,service要調用dao內方法。
對應的操作就是:在service配置文件中添加dao的<dependency>
?在controller配置文件中添加service的<dependency>
<!--Web層要創建servlet 引入servlet的API--> 在mvn倉庫搜索servlet版本就可以找到對應的dependency
maven_controller模塊里面是Webapp模塊,需要手動創建Java包并定義為source root 才可以創建類
七、Maven的打包操作
jar包:Java項目的壓縮包????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? war包:Web項目的壓縮包
通過pom.xml配置方式實現打包時的環境選擇。
1、添加對應的目錄結構
????????1、web項目一般無java文件夾,手動添加并標記
???????? 2、手動添加sources目錄并標記、并添加配置文件
2、在pom.xml配置文件中添加Profile配置
3、添加資源文件配置
添加到pom.xml的build標簽內
?
?4、執行打包操作
?
?-P指定要打包的profile的id?
skip表示跳過測試的打包
八、Maven依賴的基本概念
1、格式舉例:
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope>
</dependency>
2、三個元素:
1、依賴的基本坐標:groupId, artifactId, version(Maven根據坐標才能找到需要的依賴)
2、依賴的類型:Type (大部分情況下不需要聲明。 默認值為jar)
3、依賴的范圍:Scope (compile,test,provided,runtime,system)
4. Optional:標記依賴是否可選
5. Exclusions: 用來排除傳遞性依賴。
*compile: 編譯依賴范圍。
若無指定,則默認使用該依賴范圍。使用此依賴范圍的Maven依賴,對于編譯、測試、運行三種classpath都有效。
*test: 測試依賴范圍。
使用此依賴范圍的Maven依賴,只對于測試classpath有效,在編譯主代碼或運行項目的使用時將無法使用此類依賴。典型的例子就是JUnit,它只有在編譯測試代碼及運行測試的時候才需要。
*provided: 已提供依賴范圍。
?? 使用此依賴范圍的Maven依賴,對于編譯和測試classpath有效,但在運行時無效。例servlet-api,編譯和測試項目的時候需要該依賴,但在運行項目的時候,由于容器已經提供,就不需要Maven重復地引入一遍(如:servlet-api)
*runtime: 運行時依賴范圍。
使用此依賴范圍的Maven依賴,對于測試和運行classpath有效,編譯主代碼時無效。例JDBC驅動實現,項目主代碼的編譯只需要JDK提供的JDBC接口,只有在執行測試或運行項目的時候才需要實現上述接口的具體JDBC驅動。
*system: 系統依賴范圍。
? 該依賴與三種classpath的關系,和provided依賴范圍完全一致。但使用system范圍依賴時必須通過systemPath元素顯式地指定依賴文件的路徑。由于此類依賴不是通過Maven倉庫解析的,而且往往與本機系統綁定,可能造成構建的不可移植,因此應該謹慎使用。
3、傳遞性依賴
??? 傳遞依賴機制, 讓我們在使用某個jar的時候就不用去考慮它依賴了什么。也不用擔心引入多余的依賴。 Maven會解析各個直接依賴的POM,將那些必要的間接依賴,以傳遞性依賴的形式引入到當前項目中。
注意: 傳遞依賴有可能產生沖突!!
A --> B --> C (2.0)
A --> E --> C (1.0)
如果A下同時存在兩個不同version的C,沖突!!
(使用exclusions標簽選取同時適合A、B的版本)
<dependencies> <dependency> <groupId>A</groupId> <artifactId>A</artifactId> <version>xxx</version> <exclusions> <exclusion> <groupId>C</groupId> <artifactId>C</artifactId></exclusion> </exclusions> </dependency><dependency> <groupId>B</groupId> <artifactId>B</artifactId> </dependency>
</dependencies>
這里的<exclusions> <exclusion> <groupId>C</groupId> <artifactId>C</artifactId></exclusion> </exclusions> 來排除沖突的
結尾:常見錯誤
1、pom.xml配置文件爆紅解決
原因:依賴包下載不了
IDEA中Maven依賴包下載不了的問題解決方案匯總_idea maven包下載不下來_謎一樣的碼農的博客-CSDN博客
2、Cannot resolve symbol ‘HttpServlet‘
手動添加jar包
Cannot resolve symbol ‘HttpServlet‘_DarkYoung?的博客-CSDN博客