Maven入門到精通

目錄

一,Maven概述

1.1介紹

1.2安裝

1.3Maven生命周期和插件

1.4Maven的坐標的本地倉庫的存儲地址

二,依賴管理

2.1依賴管理——依賴范圍

2.2依賴管理——添加依賴

獲取依賴坐標

依賴添加后的操作

2.3依賴管理——依賴傳遞

2.4依賴管理——依賴沖突

依賴沖突的產生原因

兩大核心規則

2.5父子工程

父子工程的核心概念

父子工程的目錄結構

父子工程的核心特性

2.6手動解決依賴沖突

2.7依賴管理——依賴繼承

三,單元測試

3.1快速入門

3.2 斷言

3.3常見注解(JUnit)

3.4企業開發規范

使用AI生成

3.5依賴范圍

四,Nexus

4.1安裝配置Nexus私服倉庫


?

maven是apache旗下的一個開源項目,是一款用于管理和就偶見java項目的工具。

開源項目:Welcome to The Apache Software Foundation

?

Maven的作用:

  • 依賴管理:方便快捷的管理項目依賴的資源(jar包),避免版本沖突問題。

  • 統一項目結構:提供標準,統一的項目結構。

  • 項目構建:標準跨平臺(Linux,Window,MacOS)的自動化項目構建方式

一,Maven概述

1.1介紹

  • Apache Maven是一個項目管理和構建工具,它基于項目對象模型(POM)的概念,通過以小段描述信息來管理項目的構建。

  • 作用:

    • 方便的依賴管理

    • 統一的項目結構

    • 標準的項目構建流程

  • 官網:Welcome to Apache Maven – Maven

倉庫:用于存儲資源,管理各種jar包

  • 本地倉庫:自己計算機上的一個目錄。

  • 中央倉庫:由Maven團隊維護的全球唯一的。倉庫地址:Central Repository:

  • 遠程倉庫(私服):一般由公司團隊搭建的私有倉庫。

1.2安裝

詳細:

Maven安裝與配置,Idea配置Maven_idea配置javaweb開發環境-CSDN博客

  • 安裝步驟:

    1. 解壓apache-maven-3.6.1-bin.zip.

    2. 配置本地倉庫:修改conf/settings.xml中的<localRepository>為一個指定目錄

      ?<localRepository>E:\develop\apache-maven-3.6.1\mvn_repo</localRepository>
    3. 配置阿里云私服:修改conf/settings.xml中的<mirrors>標簽,為其添加如下子標簽:

      ?<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><mirrorOf>central</mirrorOf></mirror>
    4. 配置環境變量:MAVEN_HOME為maven的解壓目錄,并將其bin目錄加入PATH環境變量。

Maven的生命周期和插件_嗶哩嗶哩_bilibili

1.3Maven生命周期和插件

Lifecycle(生命周期)

  1. clean 生命周期

    • pre-clean:在執行清理操作之前,執行一些準備工作,例如關閉相關進程等。

    • clean:刪除項目構建過程中生成的臨時文件和目錄,比如target目錄,確保項目處于干凈的狀態。

    • post-clean:在清理操作完成后,執行一些收尾工作,例如記錄清理日志等。

  2. validate:驗證項目是否具備必要信息和條件,比如檢查項目的基本配置、依賴是否存在等,確保后續構建過程能夠順利進行。

  3. compile:將項目的主源代碼(通常是 Java 代碼)編譯成字節碼文件,生成的字節碼文件會存放在target/classes目錄下,供后續打包等操作使用。

  4. test:執行項目中的單元測試。此階段會運行src/test/java目錄下的單元測試代碼,使用如 JUnit 等測試框架,檢查代碼邏輯的正確性,但不進行打包操作。

  5. package:將編譯后的代碼和相關資源文件,按照項目類型(如 Java 項目生成 JAR 包,Web 項目生成 WAR 包等)進行打包,生成可部署或分發的文件,存放在target目錄下。

  6. verify:對打包后的文件進行檢查,驗證是否符合預定的質量標準,比如檢查包是否可以正常解壓、文件完整性等。

  7. install:將打包好的文件安裝到本地 Maven 倉庫,方便本地其他項目引用該項目的包作為依賴,加快構建速度。

  8. site 生命周期

    • pre-site:在生成項目站點文檔之前,執行一些準備工作,例如檢查所需資源是否齊全。

    • site:生成項目的站點文檔,包括項目的介紹、API 文檔、使用說明、測試報告等內容,方便團隊成員和外部用戶了解項目。

    • post-site:在生成站點文檔之后,執行一些處理工作,例如對站點進行優化等。

    • site-deploy:將生成的站點文檔部署到指定的服務器上,供團隊成員或外部用戶訪問。

  9. deploy:將最終的包部署到遠程倉庫(如公司的私服 私服,即私有倉庫,用于公司內部共享項目構建產物,統一管理項目依賴),供團隊成員或其他項目遠程引用,實現項目成果的共享。

Plugins(插件)

  1. maven-clean-plugin

    • 綁定階段clean生命周期的clean階段。

    • 作用:負責刪除項目構建過程中生成的臨時文件和目錄,比如target目錄,確保項目在重新構建前處于干凈的狀態。

  2. maven-compiler-plugin

    • 綁定階段default生命周期的compile階段(用于編譯主源代碼,如src/main/java下的 Java 代碼)和testCompile階段(用于編譯測試源代碼,如src/test/java下的 Java 代碼)。

    • 作用:根據配置的 Java 版本,將 Java 源代碼編譯成字節碼文件。例如,可以配置編譯版本和目標版本,如source設為11target設為11,保證代碼能在指定的 Java 環境中運行。

  3. maven-surefire-plugin

    • 綁定階段default生命周期的test階段。

    • 作用:運行項目中的單元測試代碼,一般與 JUnit、TestNG 等測試框架配合使用,通過執行src/test/java目錄下的測試類,判斷業務代碼邏輯的正確性,并生成測試報告。

  4. maven-jar-plugin

    • 綁定階段default生命周期的package階段(對于 Java 項目)。

    • 作用:將編譯后的代碼、相關配置文件以及依賴的庫等打包成 JAR 文件,方便項目的分發和使用。

  5. maven-war-plugin

    • 綁定階段default生命周期的package階段(對于 Web 項目)。

    • 作用:把 Web 項目的編譯后的代碼、靜態資源、配置文件等打包成 WAR 文件,以便部署到 Web 服務器(如 Tomcat)上運行。

  6. maven-install-plugin

    • 綁定階段default生命周期的install階段。

    • 作用:將打包好的構件(如 JAR、WAR)安裝到本地 Maven 倉庫,方便本地其他項目引用該構件作為依賴。

  7. maven-deploy-plugin

    • 綁定階段default生命周期的deploy階段。

    • 作用:將最終的構件部署到遠程倉庫(如公司的私服,即私有倉庫),供團隊其他成員或項目遠程引用,實現項目成果的共享。

1.4Maven的坐標的本地倉庫的存儲地址

maven下載的所有jar包都會安在在本地倉庫中

Maven 坐標(Coordinate)是在 Maven 項目中唯一標識一個項目或者依賴的一組信息

Maven 坐標主要包含以下三個基本元素:

1.groupId(組 ID)

  • 定義:用于標識項目所屬的組,通常是公司或組織的域名倒序 + 項目名稱。比如,Spring 項目的 groupId 是org.springframework,阿里巴巴開源項目常見的 groupId 有com.alibaba

  • 作用:主要用于區分不同組織或公司創建的項目,也用于對項目進行分組管理,方便在倉庫中歸類存放和查找。

2. artifactId(構件 ID)

  • 定義:是項目的實際名稱,在 groupId 所限定的范圍內唯一。對于一個普通的 Java 項目,artifactId 通常就是項目的根目錄名稱;如果是多模塊項目,子模塊的 artifactId 就是子模塊的目錄名稱。 例如,Spring Boot 項目中 Spring Boot Starter Web 的 artifactId 是spring-boot-starter-web

  • 作用:與 groupId 組合起來,唯一確定一個項目或者項目中的一個模塊。在 Maven 倉庫中,artifactId 用于命名項目生成的構件文件,如 JAR、WAR 等。

3.version(版本號)

  • 定義:表示項目的當前版本,常見的版本號格式有主版本號.次版本號.修訂號 ,如1.0.0。此外,還有快照版本(Snapshot Version),用于開發過程中的版本,比如1.0.0-SNAPSHOT ,表示這是一個不穩定的、會不斷更新的版本。

  • 作用:用于區分項目的不同版本,在引入依賴時,可以明確指定使用的是哪個版本的構件,方便進行版本管理和升級。

?<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency>

二,依賴管理

Maven Repository: Search/Browse/Explore

2.1依賴管理——依賴范圍

?<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><!-- ? ?  依賴范圍 ? ?  --><scope>test</scope></dependency>

Maven 的依賴范圍(Dependency Scope)用于控制依賴在不同生命周期階段(編譯、測試、運行等)的可見性,決定了依賴在哪些階段被引入到類路徑中。

  1. compile(默認范圍,可省略不寫)

  • 適用階段:編譯、測試、運行階段均有效。

  • 作用:項目核心依賴,無論是開發時編譯源代碼、運行測試用例,還是項目打包后運行,都需要該依賴。

  • 示例:Spring Core、Java 核心庫等基礎依賴。

  1. test

  • 適用階段:僅在測試編譯和測試運行階段有效,編譯主代碼和項目運行時不生效。

  • 作用:僅用于單元測試的依賴,不參與項目最終打包。

  • 示例:JUnit、TestNG 等測試框架。

  1. provided

  • 適用階段:僅在編譯和測試階段有效,運行時不需要(由運行環境提供)。

  • 作用:表示依賴由目標運行環境(如 Web 服務器)提供,打包時不會包含該依賴,避免沖突。

  • 示例:Servlet API(由 Tomcat 等容器提供)、JDK 中的某些擴展庫。

  1. runtime

  • 適用階段:僅在測試運行和項目運行階段有效,編譯主代碼時不需要。

  • 作用:編譯時不需要,但運行時需要的依賴(通常是接口實現類)。

  • 示例:JDBC 驅動(編譯時只需 JDBC 接口,運行時需要具體數據庫驅動)。

  1. system

  • 適用階段:與provided類似(編譯和測試階段有效),但依賴不是從 Maven 倉庫獲取,而是本地文件系統的 jar 包。

  • 注意:需通過systemPath指定本地路徑,不推薦使用(移植性差)。

    ?<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><!-- ? ?  依賴范圍 ? ? ? --><scope>system</scope><!-- ? ?  本地路徑 ? ? ? --><systemPath>${basedir}/lib/junit-3.8.1.jar</systemPath></dependency>
  1. import(僅用于 pom 類型依賴)

  • 適用場景:僅在<dependencyManagement>中使用,用于導入其他 pom 文件中定義的依賴管理配置,實現依賴版本的集中管理。

  • 作用:解決 Maven 單繼承限制,可導入多個 pom 的依賴配置。

2.2依賴管理——添加依賴

在mvn repository網站上搜索并找到依賴坐標,添加到pom.xml文件中即可

Maven Repository: Search/Browse/Explore

獲取依賴坐標

1.Maven 中央倉庫查詢 訪問 Maven Repository 或 Maven Central,搜索依賴名稱(如spring-core),選擇對應版本后直接復制坐標。

2.IDE 自動提示 在 IntelliJ IDEA 或 Eclipse 中,編輯pom.xml時,輸入<dependency>后,IDE 會自動提示常用依賴,選擇后自動補全坐標。

依賴添加后的操作

1.刷新 Maven 項目 添加依賴后,需刷新項目使 Maven 下載依賴到本地倉庫:

  • IDEA:右鍵項目 → MavenReload Project

  • Eclipse:右鍵項目 → MavenUpdate Project

2.依賴存放位置 下載的依賴默認存放在本地倉庫(通常是~/.m2/repository,Windows 為C:\Users\用戶名\.m2\repository),按groupId+artifactId+version的目錄結構存放。

2.3依賴管理——依賴傳遞

Maven 的依賴傳遞(Transitive Dependencies)是指當項目引入一個直接依賴時,Maven 會自動將該依賴所依賴的其他庫(間接依賴)也引入到項目中,無需手動添加。

  1. 直接依賴與間接依賴

    • 直接依賴:在pom.xml中顯式聲明的依賴(如項目 A 依賴庫 B)。

    • 間接依賴:直接依賴所依賴的庫(如庫 B 依賴庫 C,則庫 C 是項目 A 的間接依賴)。

  2. 傳遞規則 Maven 會通過依賴的pom.xml文件遞歸解析所有間接依賴,并自動下載到本地倉庫,加入項目的類路徑。 例如:引入spring-boot-starter-web(直接依賴)時,Maven 會自動引入其依賴的spring-coretomcat-embed-core等(間接依賴)。

2.4依賴管理——依賴沖突

依賴沖突的產生原因

  1. 間接依賴的版本不一致 項目的直接依賴可能各自依賴同一庫的不同版本,導致 Maven 在傳遞依賴時引入多個版本。 例如:項目依賴 A(依賴庫 C 的 1.0 版本)和依賴 B(依賴庫 C 的 2.0 版本),此時庫 C 的 1.0 和 2.0 版本會同時被引入,引發沖突。

  2. 依賴路徑差異 同一庫可能通過不同的依賴路徑被引入,且路徑長度或聲明順序不同,導致 Maven 選擇的版本不符合預期。

兩大核心規則

“路徑最短優先” 和 “先聲明優先” 是 Maven 解決版本沖突的兩大核心規則:

1. 路徑最短優先(Shortest Path First)

  • 規則:當同一依賴的不同版本通過不同路徑被引入時,路徑長度最短的版本優先被選擇。 路徑長度指依賴鏈的層級數(項目直接依賴的路徑長度為 1,間接依賴的路徑長度為對應層級數)。

  • 示例

    • 項目 A 直接依賴庫 B(路徑長度 1),庫 B 依賴庫 C(版本 1.0,路徑長度 2:A→B→C)。

    • 項目 A 同時依賴庫 D(路徑長度 1),庫 D 依賴庫 E(路徑長度 2),庫 E 依賴庫 C(版本 2.0,路徑長度 3:A→D→E→C)。

    • 結果:庫 C 的 1.0 版本被選中(路徑長度 2 < 3)。

  • 本質:離項目更近的依賴版本優先級更高,減少深層級依賴對項目的影響。

2. 先聲明優先(Declaration Order)

  • 規則:當同一依賴的不同版本路徑長度相同時,在pom.xml<dependencies>聲明順序靠前的依賴所引入的版本優先被選擇

  • 示例

    • 項目 A 先聲明依賴庫 B(路徑長度 1),庫 B 依賴庫 C(版本 1.0)。

    • 項目 A 后聲明依賴庫 D(路徑長度 1),庫 D 依賴庫 C(版本 2.0)。

    • 此時庫 C 的兩個版本路徑長度均為 2(A→B→C 和 A→D→C),結果:先聲明的庫 B 所依賴的 C 1.0 版本被選中。

  • 注意:僅當路徑長度完全相同時,聲明順序才起作用,優先級低于 “路徑最短優先”。

2.5父子工程

父子工程的核心概念

  1. 父工程(Parent Project)

    • 是整個項目的頂層工程,本身不包含業務代碼,僅用于管理子模塊的公共配置。

    • pom.xmlpackaging類型必須為pom(默認是jar)。

      ?<!-- 表示這是一個父工程,不會生成如何jar包,war包,而是用于管理子工程 --><packaging>pom</packaging>
  2. 子模塊(Child Module)

    • 是具體的功能模塊(如servicewebdao等),可包含獨立的代碼和配置。

    • 每個子模塊通過parent標簽指定父工程,繼承父工程的配置。

    ?<parent><groupId>com.ithe</groupId><artifactId>maven-demo01</artifactId><version>1.0-SNAPSHOT</version></parent>

    ?

父子工程的目錄結構

?my-project/ ? ? ? ? ? ? ?  # 父工程根目錄├── pom.xml ? ? ? ? ? ? ?  # 父工程的pom.xml(packaging: pom)├── user-service/ ? ? ? ?  # 子模塊1│ ? └── pom.xml ? ? ? ? ?  # 子模塊1的pom.xml└── order-service/ ? ? ? ? # 子模塊2└── pom.xml ? ? ? ? ?  # 子模塊2的pom.xml

父子工程的核心特性

  1. 配置繼承 子模塊自動繼承父工程的以下配置:

    • groupIdversion(子模塊可省略,直接繼承)。

    • dependencyManagement中的依賴版本(子模塊引用時無需重復聲明版本)。

    • build中的插件配置(如編譯器版本、打包插件等)。

  2. 依賴傳遞與模塊引用 子模塊之間可相互依賴,例如order-service依賴user-service

    ?<!-- order-service 的 pom.xml --><dependencies><dependency><groupId>com.example</groupId><artifactId>user-service</artifactId><!-- 版本繼承父工程的1.0.0 --></dependency></dependencies>
  3. 統一構建 在父工程目錄執行 Maven 命令(如mvn clean install),會自動按依賴順序構建所有子模塊,避免手動逐個構建的繁瑣。

2.6手動解決依賴沖突

?

2.7依賴管理——依賴繼承

使用父子模塊管理公共依賴

所有在父工程的dependencies標簽里定義的依賴都會被無條件地繼承到所有的子模塊中(導致子模塊和父模塊耦合度太高)

使用dependencyManagement標簽(依賴管理):可以手動選擇繼承依賴

?<!--父模塊--><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>6.2.3</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.2.3</version></dependency></dependencies></dependencyManagement>
<!--子模塊 從父模塊繼承依賴不用寫版本號-->
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency></dependencies>

properties標簽:定義公共屬性

?<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!--修改版本號只需修改公共定義即可--><spring.version>6.2.3</spring.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency></dependencies></dependencyManagement>

三,單元測試

  • 測試:是一種用來促進鑒定軟件的正確性,完整性,安全性和質量的過程。

  • 階段劃分:單元測試,集成測試,系統測試,驗收測試。

    • 單元測試(白盒測試):對軟件的基本組成單位進行測試,最小測試單位。檢驗軟件基本組成單元的正確性。開發人員測試。

    • 集成測試(灰盒測試):將已分別通過測試的單元,按設計要求組合成系統或者子系統,在進行測試。檢查單元組件的協作是否正確。開發人員測試。

    • 系統測試(黑盒測試):對已經集成好的軟件系統進行徹底的測試。驗證軟件系統的正確性,性能是否滿足指定的要求。測試人員測試。

    • 驗收測試(黑盒測試): 交付測試,是針對用戶需求,業務流程進行的正式的測試。驗證軟件系統是否滿足驗收標準。各戶/需求方測試。

  • 測試方法:白盒測試,黑盒測試,灰盒測試

    • 白盒測試:清楚軟件內部結構,代碼邏輯。用于驗證代碼,邏輯正確性。

    • 黑盒測試:不清楚軟件內部結構,代碼邏輯。用于驗證軟件的功能,兼容性等方面。

    • 灰盒測試:結合了白盒測試和黑盒測試的特點,即關注軟件內部結構又考慮外部表現(功能)。

3.1快速入門

單元測試:就是針對最小的功能單元(方法),編寫測試代碼對其正確性進行測試。

JUnit:最流行的Java測試框架之一,提供了一些功能,方便程序進行單元測試(第三方公司提供)。

mian方法測試:

  1. 測試代碼與源代碼為分開,難維護

  2. 一個方法測試失敗,影響后面的方法

  3. 無法自動化測試,得到測試報告

JUnit單元測試:

  1. 測試代碼與源代碼分開,便于維護

  2. 可根據需要進行自動化測試

  3. 可自動分析測試結果,產出測試報告

案例:使用JUnit,對UserService中的業務方法進行單元測試

  1. 在pom.xml中,引入JUnit的依賴

  2. 在test/java目錄下,創建測試類,并編寫對應的測試方法,并在方法上聲明@Test注解

?<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version></dependency>
?
@Testpublic void testGetAge(){UserService userService = new UserService();Integer age = userService.getAge("12342012354697256");System.out.println(age);}

小結:

  1. JUnit單元測試是做什么的?

    • 測試類中方法的正確性

  2. JUnit單元測試的優點是什么?

    • 測試代碼與應用程序代碼分開,便于維護

    • 可以自動生成測試報告(通過:綠色,失敗:紅色)

    • 一個測試方法執行失敗,不會影響其他測試方法

  3. JUnit單元測試的命名規范?

    • 類:XxxxTest (規范)

    • 方法:public void xxxx(){…} (規定)

3.2 斷言

  • JUnit提供了一些輔助方法,用來幫助我們確定被測試的方法是否安裝預期正常工作,這種方法稱為斷言

    斷言方法描述
    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 ,表示錯誤提示信息,可以不指定(有對應的重載方法)

?@Testpublic void testGetAge2(){UserService userService = new UserService();Integer age = userService.getAge("123456");//斷言Assertions.assertEquals(6, age);}

小結:

  1. 在JUnit單元測試中,為什么要使用斷言?

    • 單元測試方法運行不報錯,不代表業務方法沒問題。

    • 通過斷言可以檢測方法運行結果是否和預期一致,從而判斷業務方法的正確性。

3.3常見注解(JUnit)

注解說明備注
@Test測試類中的方法用它修飾才能稱為測試方法,才能啟動執行單元測試
@ParameterizedTest參數化測試的注解(可以讓單個測試運行多次,每次運行時僅參數不同)用了該注解,就不需要@Test注解了
@ValueSource參數化測試的參數來源,賦予測試方法參數與參數化測試注解配合使用
@DisplayName指定測試類,測試方法顯示的名稱(默認為類名,方法名)?
@BeforeEach用來修飾一個實例方法,該方法會在每一個測試方法執行之前執行一次初始化資源(準備工作)
@AfterEach用來修飾一個實例方法,該方法會在每一個測試方法執行之后執行一次釋放資源(清理工作)
@BeforeAll用來修飾一個靜態方法,該方法會在所有測試方法之前只執行一次初始化資源(準備工作)
@AfterAll用來修飾一個靜態方法,該方法會在所有測試方法之后只執行一次釋放資源(清理工作)

小結:

  1. JUnit單元測試的方法,是否可以聲明方法形參?

    • 可以,參數化測試

    • @ParameterizedTest+@ValueSource

  2. 如何實現在單元測試方法運行之前,做一些初始化操作?

    • @BeforeEach,@BeforeAll

  3. 如何實現在單元測試方法運行之后,釋放對應的資源?

    • @AfterEach,@AfterAll

3.4企業開發規范

原則:編寫測試方法時,要盡可能的覆蓋業務方法中所有可能的情況(尤其是邊界值)。

案例:

?public String getGender(String num){// 根據身份證號num得出性別if (num == null || num.length() != 18) {throw new IllegalArgumentException("身份證號格式不正確"); // 身份證號格式不正確}return Integer.parseInt(num.substring(16, 17)) % 2 == 0 ? "女" : "男";}

?

?//覆蓋識別性別的所有可能import com.ithe.Service.UserService;import org.junit.jupiter.api.Assertions;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;?@DisplayName("用戶信息測試類")public class UserService2Test {private UserService userService;?@BeforeEachpublic void setUp() {userService = new UserService();}?@Test@DisplayName("測試用戶性別-null")public void testGetGender1(){Assertions.assertThrows(IllegalArgumentException.class,()->{userService.getGender(null);});}@Test@DisplayName("測試用戶性別-空串")public void testGetGender2(){Assertions.assertThrows(IllegalArgumentException.class,()->{userService.getGender("");});}@Test@DisplayName("測試用戶性別-長度不足")public void testGetGender3(){Assertions.assertThrows(IllegalArgumentException.class,()->{userService.getGender("110");});}@Test@DisplayName("測試用戶性別-長度超出")public void testGetGender4(){Assertions.assertThrows(IllegalArgumentException.class,()->{userService.getGender("111000100029384022292747218343");});}@Test@DisplayName("測試用戶性別-正常男性情況")public void testGetGender5(){String gender=userService.getGender("100000200010011011");Assertions.assertEquals("男",gender);?}@Test@DisplayName("測試用戶性別-正常女性情況")public void testGetGender6(){String gender=userService.getGender("100000200010011021");Assertions.assertEquals("女",gender);}}

編寫完測試類后運行點擊Run ‘…’ with Coverage可查看覆蓋率(用于檢驗):

?

使用AI生成

?

小結:

  1. 在maven項目中,test目錄存放單元測試的代碼,是否可以在main目錄中編寫單元測試?

    • 可以,但不規范(可以通過maven的依賴范圍限制)

3.5依賴范圍

  • 依賴的jar包,默認情況下,可以在任何地方使用,可以通過<scope>...</scope>設置其作用范圍。

  • 作用范圍:

    • 主程序范圍有效(main文件夾范圍內)

    • 測試程序范圍有效(test文件范圍內)

    • 是否參與打包運行(package指令范圍內)

?

四,Nexus

4.1安裝配置Nexus私服倉庫

私服倉庫一般是架設在公司內部的一種特殊遠程倉庫(nexus,archiva,artifactory):

Nexus 是一款流行的倉庫管理工具,主要用于集中存儲、管理和分發各種類型的軟件包(如依賴庫、插件、容器鏡像等),常被企業或團隊用作 “私有倉庫服務器”(私服),解決依賴管理、版本控制和資源共享的問題。

核心作用

  1. 私有倉庫管理 存儲企業內部開發的私有組件(如自研的 Jar 包、npm 包等),避免私有代碼泄露到公共倉庫(如 Maven 中央倉庫、npm 官方倉庫)。

  2. 代理遠程倉庫 作為公共倉庫(如 Maven Central、Docker Hub)的 “中轉站”,緩存遠程資源。團隊成員下載依賴時,先從 Nexus 獲取(若已緩存),避免重復訪問遠程倉庫,提升下載速度并節省帶寬。

下載界面:Download

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95876.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡 TCP 延遲確認機制

TCP 延遲確認&#xff08;Delayed Acknowledgments&#xff0c;簡稱 Delayed ACK&#xff09;是 TCP 協議中一項旨在減少網絡中小數據包數量、提升傳輸效率的優化機制。其核心思想是&#xff1a;不立即回復 ACK&#xff0c;而是等待一段時間&#xff08;通常 40ms&#xff09;&…

【visual studio】visual studio配置環境opencv和onnxruntime

下載opencv https://opencv.org/releases/?spma2ty_o01.29997173.0.0.57f4c921RELipW配置環境變量visual studio配置opencv 新建c項目選中文件后右鍵選擇屬性添加include文件夾庫文件添加lib添加lib文件 將上一步的lib文件夾下的兩個文件復制到這里以下兩者區別在于&#xff0…

【Java】多線程Thread類

1. 進程與線程進程與線程的基本認識進程&#xff08;Process&#xff09;&#xff1a;進程是程序的一次動態執行過程&#xff0c;它經歷了從代碼加載、執行、到執行完畢的一個完整過程&#xff1b;同時也是并發執行的程序在執行過程中分配和管理資源的基本單位&#xff0c;競爭…

C/C++復習(四)

一.模版 模版涉及的是泛型編程&#xff0c;即通過編譯器去確定類型的編程方式&#xff0c;模版分為&#xff1a;類模板和函數模版&#xff0c;下面我們一一復習&#xff1a; 函數模版&#xff1a; 格式&#xff1a; template<typename T1, typename T2,......,typename Tn&g…

022 基礎 IO —— 文件

&#x1f984; 個人主頁: 小米里的大麥-CSDN博客 &#x1f38f; 所屬專欄: Linux_小米里的大麥的博客-CSDN博客 &#x1f381; GitHub主頁: 小米里的大麥的 GitHub ?? 操作環境: Visual Studio 2022 文章目錄基礎 IO —— C 語言文件 I/O 操作基礎前言1. C 語言文件操作函數匯…

MNN LLM Chat iOS 流式輸出優化實踐

本文介紹了在 iOS 平臺上使用 MNN 框架部署大語言模型&#xff08;LLM&#xff09;時&#xff0c;針對聊天應用中文字流式輸出卡頓問題的優化實踐。通過分析模型輸出與 UI 更新不匹配、頻繁刷新導致性能瓶頸以及缺乏視覺動畫等問題&#xff0c;作者提出了一套包含智能流緩沖、U…

【開發技巧】VS2022+QT5+OpenCV4.10開發環境搭建QT Creator

VS2022編譯器支持配置 QT5默認安裝以后支持的是VS2015與VS2017&#xff0c;不支持VS2022&#xff0c;所以必須首先在Qt Creator中配置支持VS2022。配置順序如下&#xff1a; 首先打開【工具】->【選項】 然點擊Kits里面的【編譯器】選項。點擊Manual下面的【C】然后點擊【…

【Linux系統】動靜態庫的制作

前言&#xff1a; 上文我們講到了文件系統【Linux系統】詳解Ext2&#xff0c;文件系統-CSDN博客 本文我們來講講動靜態庫的制作 庫 【Linux】編譯器gcc/g及其庫的詳細介紹_linux gcc 有哪些庫-CSDN博客 這篇文章的第4大點&#xff0c;簡單是介紹了一下庫的基本概念。 靜態庫 靜…

鏈式二叉樹的基本操作——遍歷

本文筆者將帶領讀者一起學習鏈式二叉樹的一些基本語法&#xff0c;至于更難一些的插入刪除等&#xff0c;筆者將在后續C更新后再次詳細帶領大家學習。 首先&#xff0c;在進行二叉樹之前&#xff0c;我們需要一顆二叉樹&#xff0c;而二叉樹的初始化現階段實現不太現實&#x…

Windows運維之以一種訪問權限不允許的方式做了一個訪問套接字的嘗試

一、問題場景 在Windows 上運維服務過程中&#xff0c;經常會遇到運行服務&#xff0c;部署安裝時候無任何問題&#xff0c;后續再某個特殊時間點&#xff0c;突然服務無法啟動了。再次啟動時&#xff0c;提示端口占用與以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。 …

2020/12 JLPT聽力原文 問題二 3番

3番&#xff1a;レストランで、女の人と店長が話しています。店長はサラダについて、どんなアドバイスをしていますか。女&#xff1a;店長、この前話してた新しいランチメニューのサラダを作ってみたんですが、どうでしょうか。 男&#xff1a;ああ、サラダだけで満足できるっ…

芯片行業主要廠商

作為一個小白&#xff0c;每次淘寶買芯片時看到相似的命名規則&#xff1a;“OPA、AD、LT、MAX”等等時&#xff0c;我不禁好奇這些芯片行業大廠有哪些&#xff0c;所以查了些資料&#xff1a; 1. 德州儀器&#xff08;Texas Instruments, TI&#xff09; 公司概況&#xff1…

【BLE系列-第四篇】從零剖析L2CAP:信道、Credit流控、指令詳解

目錄 引言 一、L2CAP主要功能 二、L2CAP幀格式及信道概念 2.1 邏輯鏈路是什么&#xff1f; 2.2 邏輯信道的作用 2.3 L2CAP幀格式介紹 三、L2CAP信令信道 3.1 信令信道幀格式說明 3.2 信令信道指令介紹 3.2.1 信令信道指令一覽表 3.2.2 Credit流控規則 引言 在BLE協…

CSS保持元素寬高比,固定元素寬高比

方法一&#xff1a; <div class"hcp-fixed-aspect-ratio-box">這里是正文內容 </div>.hcp-fixed-aspect-ratio-box {width: 50%;color: #FFFFFF;margin: 100px auto;background: #FF0000;/* 寬高比2:1&#xff0c;兼容性可能不太好 */aspect-ratio: 2 / …

數據分析小白訓練營:基于python編程語言的Numpy庫介紹(第三方庫)(上篇)

&#xff08;一&#xff09;Numpy庫的安裝安裝指定版本的Numpy庫&#xff0c;打開命令提示符&#xff0c;輸入下圖內容&#xff0c;只需要將1.25.5的版本修改成個人需要的版本&#xff0c;然后按下回車鍵&#xff0c;numpy庫就安裝在python中&#xff1a;指定版本numpy庫安裝可…

從 Windows 到 Linux 服務器的全自動部署教程(免密登錄 + 壓縮 + 上傳 + 啟動)

一、準備工作 1. 環境說明 本地開發環境&#xff1a;Windows 服務器&#xff08;需執行部署腳本&#xff09;目標服務器&#xff1a;Linux 服務器&#xff08;需安裝 node.js、pm2、unzip&#xff09;核心工具&#xff1a;7-Zip&#xff08;壓縮&#xff09;、OpenSSH&#x…

智能汽車領域研發,復用云原始開發范式?

汽車電子電氣架構演進趨勢&#xff1a;分散的功能ECU -> 域控制器 -> 中央計算服務器汽車電子方案與架構在發展與迭代時會使用虛擬化方法幾種可行的軟硬一體化方案&#xff1a;多ECU&#xff0c;硬件隔離&#xff0c;硬件分區&#xff0c;車規級多核硬件架構 Hypervisor…

數據電臺詢價的詢價要求

技術規格及主要參數 1.電臺基本要求&#xff1a; 1.1 電臺中的信號處理基于FPGA設計&#xff0c;采用FPGAARM高速AD/DA設計架構&#xff1b; 1.2 具備頻譜感知、自主選頻、跳頻、擴頻等功能&#xff1b; 1.3 具備鏈路質量信息、自組網路由信息、電池電壓監測信息、北斗定位信息…

IoT/HCIP實驗-5/基于WIFI的智慧農業實驗(LwM2M/CoAP+PSK+ESP8266 連接到 IoTDA)

文章目錄概述WIFI8266 通信模組WIFI模組也用AT指令&#xff1f;ESP8266 內置協議棧?支持的無線網絡模式MCU通過串口與模組交互Wifi模組做客戶端PC-AT接入路由器向本地TCP服務發數據用代碼接入你家路由器已接入AP&#xff08;你家Wifi&#xff09;平臺側開發工程配置和編譯工程…

定時器輸出PWM波配置(呼吸燈)

使用定時器 4 通道 3 生成 PWM 波控制 LED1 &#xff0c;實現呼吸燈效果。 頻率&#xff1a;2kHz&#xff0c;PSC71&#xff0c;ARR499pwm.c:#include "pwm.h" // 本模塊頭文件&#xff1a;應聲明 pwm_init/pwm_compare_set 等原型、并包含 HAL 頭//&#xff08;示…