Maven
Maven核心
Maven概述
-
定義:
Maven是一款用于管理和構建Java項目的工具,是apache旗下的一個開源項目,基于項目對象模型(POM,project object model)的概念,通過一小段描述信息來管理項目的構建。官網:http://maven.apache.org/
-
作用:
- 依賴管理:方便快捷地管理依賴的資源(jar包)
- 項目構建:標準化的跨平臺(Linux、Windows、MacOS)的自動化項目構建方式
- 統一項目結構:提供標準、統一的項目結構
-
結構:
- POM
- dependencies
- 構建生命周期/階段
- 倉庫:用于存儲和管理各種jar包
- 本地倉庫(1):自己計算機上的一個目錄
- 遠程倉庫(私服,2):一般由公司團隊搭建的私有倉庫。
- 中央倉庫(3):由Maven團隊維護的全球唯一的。倉庫地址:https://repo1.maven.org/maven2/
IDEA集成Maven
-
創建Maven項目
- 配置Maven環境(全局)
-
Maven坐標
- Maven中的坐標是資源(jar)的唯一標識,通過該坐標可以唯一定位資源位置。
- 使用坐標來定義項目或引入項目中需要的依賴
- 主要組成
- groupId:定義當前Maven項目隸屬組織名稱(通常是域名反寫)
- artifactId:定義當前Maven項目名稱(通常是模塊名稱)
- version:定義當前項目版本號(約定規范)
- SNAPSHOT:功能不穩定、尚處于開發中的版本,即快照版本
- RELEASE:功能趨于穩定、當前更新停止,可以用于發行的版本
-
導入Maven項目
建議將要導入的maven項目復制到你的項目目錄下
建議選擇maven項目的pom.xml文件進行導入(后續的繼承與集合,如果一個模塊關聯了其他模塊,選擇pom可以一次性將其他相關模塊一起導入)
- File -> Project Structure -> Modules -> Import Module -> 選擇maven項目的pom.xml
- Maven面板 -> + (Add Maven Projects) -> 選擇maven項目的pom.xml
依賴管理
注意:一旦依賴配置變更了,記得重新加載
注意:引入的依賴本地倉庫不存在,記得聯網
-
依賴:指當前項目運行所需要的jar包,一個項目中可以引入多個依賴。
-
配置:
- 在pom.xml中編寫
<dependencies>
標簽 - 在
<dependencies>
標簽中使用<dependency>
引入坐標 - 定義坐標的
groupId, artifactId, version
- 點擊刷新按鈕,引入最新加入的坐標
- 如果不知道依賴的坐標信息,可以到官網中搜索
- 依賴傳遞:如果A依賴了B,B依賴了C,C依賴了D,如果引入A,會引入ABCD
- 在pom.xml中編寫
-
排除依賴
-
排除依賴:指主動斷開依賴的資源,被排除的資源無需指定版本
<exclusion></exclusion>
-
生命周期
Maven的生命周期就是為了對所有的maven項目構建過程進行抽象和統一。
Maven中有相互獨立的3套生命周期:
下文只列出了重要的5個生命周期,實際上還有很多
在同一套生命周期中,當運行后面的階段時,前面的階段都會運行
- clean:清理工作
- clean:移除上一次構建生成的文件
- default:核心工作,如編譯、測試、打包、安裝、部署等
- compile:編譯項目源代碼
- test:使用合適的單元測試框架運行測試(junit)
- package:將編譯后的文件打包,如:jar、war等
- install:安裝項目到本地倉庫
- site:生成報告、發布站點等
執行生命周期的兩種方式:
- 在idea中,右側的maven工具欄,選中對應的生命周期,雙擊執行。
- 在命令行中,通過命令執行。
單元測試
測試
一種用來促進鑒定軟件的正確性、完整性、安全性和質量的過程。
階段劃分:
- 單元測試(白盒測試)
- 介紹:對軟件的基本組成單位進行測試,最小測試單位。
- 目的:檢驗軟件基本組成單位的正確性。
- 測試人員:開發人員
- 集成測試(灰盒測試)
- 介紹:將已分別通過測試的單元,按設計要求組合成系統或子系統,再進行的測試。
- 目的:檢查單元之間的協作是否正確。
- 測試人員:開發人員
- 系統測試(黑盒測試)
- 介紹:對已經集成好的軟件系統進行徹底的測試。
- 目的:驗證軟件系統的正確性、性能是否滿足指定的要求。
- 測試人員:測試工程師
- 驗收測試(黑盒測試)
- 介紹:交付測試,時針對用戶需求、業務流程進行的正式的測試。
- 目的:驗證軟件系統是否滿足驗收標準。
- 測試人員:客戶/需求方
測試方法:
- 白盒測試
- 清楚軟件內部結構、代碼邏輯
- 用于驗證代碼、邏輯正確性
- 黑盒測試
- 不清楚軟件內部結構、代碼邏輯
- 用于驗證軟件的功能、兼容性等方面
- 灰盒測試
- 結合了白盒、黑盒測試的特點,既關注軟件的內部結構又考慮外部表現(功能)
單元測試
快速入門
針對最小的功能單元(方法),編寫測試代碼對其正確性進行測試。
JUnit:最流行的Java測試框架之一,提供了一些功能,方便程序進行單元測試(第三方公司提供)
main方法測試
- 測試代碼與源代碼未分開,難以維護
- 一個方法測試失敗,影響后面方法
- 無法自動化測試,得到測試報告
JUnit單元測試(推薦)
-
測試代碼與源代碼分開,便于維護
-
可根據需要進行自動化測試
-
可自動分析測試結果,產出測試報告(通過:綠色,失敗:紅色)
-
一個測試方法執行失敗,不會影響其它測試方法
-
步驟
- 在pom.xml中,引入JUnit的依賴
- 在test/java目錄下,創建測試類,并編寫對應的測試方法,并在方法上聲明@Test注解。
-
命名規范
類(規范):
XxxxTest
方法(規定):
@Test <br> public void testXxxx
斷言
JUnit提供的輔助方法,用來幫我們確定被測試的方法是否按照預期的效果正常工作,這種方式稱為斷言。
- 單元測試方法運行不報錯,不代表業務方法沒問題
- 通過斷言可以檢測方法運行結果是否和預期一致,從而判斷業務方法的正確性
- Assertions.assertXxxx(…)
斷言方法 | 描述 |
---|---|
Assertions.assertEquals(Object exp, Object act, String msg) | 檢查兩個值是否相等,不相等就報錯 |
Assertions.assertNotEquals(Object unexp, Object act, String msg) | 檢查兩個值是否不相等,相等就報錯 |
Assertions.assertNull(Object act, String msg) | 檢查對象是否為null,不為null就報錯 |
Assertions.assertNotNull(Object act, String msg) | 檢查對象是否不為null,為null就報錯 |
Assertions.assertTrue(boolean condition, String msg) | 檢查對象是否為true,不為true就報錯 |
Assertions.assertFalse(boolean condition, String msg) | 檢查對象是否為false,不為false就報錯 |
Assertions.assertThrows(Class expType, Executable exec, String msg) | 檢查程序運行拋出的異常,是否符合預期 |
上述方法形參中的最后一個參數msg,表示錯誤提示信息,可以不指定(有對應的重載方法)
常見注解
JUnit還提供了常見注解,還增強其功能,常見的注解有:
0注解 | 說明 | 備注 |
---|---|---|
@Test | 測試類中的方法用它修飾才能成為測試方法,才能啟動執行 | 單元測試 |
@ParameterizedTest | 參數化測試的注解(可以讓單個測試運行多次,每次運行時僅參數不同) | 用了該注解就不需要@Test注釋了 |
@ValueSource | 參數化測試的參數來源,賦予測試方法參數 | 與參數化測試注解配合使用 |
@DisplayName | 指定測試類、測試方法顯示的名稱(默認為類名、方法名) | |
@BeforeEach | 用來修飾一個實例方法,該方法會在每一個測試方法執行之前執行一次 | 初始化資源(準備工作) |
@AfterEach | 用來修飾一個實例方法,該方法會在每一個測試方法執行之后執行一次 | 釋放資源(清理工作) |
@BeforeAll | 用來修飾一個靜態方法,該方法會在所有測試方法之前只執行一次 | 初始化資源(準備工作) |
@AfterAll | 用來修飾一個靜態方法,該方法會在所有測試方法之后只執行一次 | 釋放資源(清理工作) |
單元測試-企業開發規范
- 原則:編寫測試方法是,要盡可能覆蓋業務方法中所有可能的情況(尤其是邊界值)。
- 使用with Coverage檢測覆蓋率。
依賴范圍
-
依賴的jar包,默認情況下,可以在任何地方使用。可以通過
<scope>xxx</scope>
設置其作用范圍。 -
作用范圍:
-
主程序范圍有效。(main文件夾范圍內)
-
測試程序范圍有效。(test文件夾范圍內)
-
是否參與打包運行。(package指令范圍內)
scope值 主程序 測試程序 打包(運行) 范例 compile(默認) Y Y Y log4j test - Y - junit provided Y Y - servlet-api runtime - Y Y jdbc驅動
-
Maven常見問題解決方案
-
Maven面板出現紅色下劃線,刷新無用
-
產生原因:由于網絡原因,依賴沒有下載完整導致的,在maven倉庫中生成了
xxx.lastUpdated
文件,該文件不刪除,不會再重新下載 -
解決方案:通過命令
(del /s *.lastUpdated)
批量遞歸刪除指定目錄下的xxx.lastUpdated
文件,刪除之后重新加載項目即可重新加載下載依賴之后如果仍然報紅,關閉IDEA重載項目
-