Web后端基礎:Maven基礎

課程內容:

  • 初始Maven
  • Maven概述
    • Maven模型
    • Maven倉庫介紹
    • Maven安裝與配置
  • IDEA集成Maven
  • 依賴管理
  • 單元測試

1.初始Maven

1.1介紹

Maven 是一款用于管理和構建Java項目的工具,是Apache旗下的一個開源項目 。

Apache 軟件基金會,成立于1999年7月,是目前世界上最大的最受歡迎的開源軟件基金會,也是一個專門為支持開源項目而生的非盈利性組織。
開源項目:https://www.apache.org/index.html#projects-list

1.2Maven的作用

在這里插入圖片描述

1.2.1依賴管理

方便快捷的管理項目依賴的資源(jar包),避免版本沖突問題。
1). 使用maven前
我們項目中要想使用某一個jar包,就需要把這個jar包從官方網站下載下來,然后再導入到項目中。然后在這個項目中,就可以使用這個jar包了。
在這里插入圖片描述
2). 使用maven后
當使用maven進行項目依賴(jar包)管理,則很方便的可以解決這個問題。 我們只需要在maven項目的pom.xml文件中,添加一段如下圖所示的配置即可實現。
在這里插入圖片描述
在maven項目的配置文件中,加入上面這么一段配置信息之后,maven會自動的根據配置信息的描述,去下載對應的依賴。 然后在項目中,就可以直接使用了。

1.2.2項目構建

Maven還提供了標準化的跨平臺的自動化構建方式。
在這里插入圖片描述
通過Maven中的命令,就可以很方便的完成項目的編譯(compile)、測試(test)、打包(package)、發布(deploy) 等操作。
而且這些操作都是跨平臺的,也就是說無論你是Windows系統,還是Linux系統,還是Mac系統,這些命令都是支持的。

1.2.3統一項目結構

1). 未使用Maven
由于java的開發工具呢,有很多,除了大家熟悉的IDEA以外,還有像早期的Eclipse、MyEclipse。而不同的開發工具,創建出來的java項目的目錄結構是存在差異的,那這就會出現一個問題。
Eclipse創建的java項目,并不能直接導入IDEA中。 IDEA創建的java項目,也沒有辦法直接導入到Eclipse中。
在這里插入圖片描述
2). 使用Maven
而如果我們使用了Maven這一款項目構建工具,它給我們提供了一套標準的java項目目錄。如下所示:
在這里插入圖片描述
而在上面的maven項目的目錄結構中,main目錄下存放的是項目的源代碼,test目錄下存放的是項目的測試代碼。 而無論是在main還是在test下,都有兩個目錄,一個是java,用來存放源代碼文件;另一個是resources,用來存放配置文件。
最后呢,一句話總結一下什么是Maven。 Maven就是一款管理和構建java項目的工具。

2.Maven概述

2.1Maven介紹

Apache Maven是一個項目管理和構建工具,它基于項目對象模型(Project Object Model , 簡稱: POM)的概念,通過一小段描述信息來管理項目的構建、報告和文檔。
官網:https://maven.apache.org/
Maven的作用:

  1. 方便的依賴管理
  2. 統一的項目結構
  3. 標準的項目構建流程

2.2 Maven模型

  • 項目對象模型 (Project Object Model)
  • 依賴管理模型(Dependency)
  • 構建生命周期/階段(Build lifecycle & phases)

1). 構建生命周期/階段(Build lifecycle & phases)
[圖片]
以上圖中紫色框起來的部分,就是用來完成標準化構建流程 。當我們需要編譯,Maven提供了一個編譯插件供我們使用;當我們需要打包,Maven就提供了一個打包插件供我們使用等。
2). 項目對象模型 (Project Object Model)
在這里插入圖片描述
以上圖中紫色框起來的部分屬于項目對象模型,就是將我們自己的項目抽象成一個對象模型,有自己專屬的坐標,如下圖所示是一個Maven項目:
在這里插入圖片描述

坐標,就是資源(jar包)的唯一標識,通過坐標可以定位到所需資源(jar包)位置。 坐標的組成部分:

  • groupId: 組織名
  • arfitactId: 模塊名
  • Version: 版本號

3). 依賴管理模型(Dependency)
在這里插入圖片描述
以上圖中紫色框起來的部分屬于依賴管理模型,是使用坐標來描述當前項目依賴哪些第三方jar包。
在這里插入圖片描述
之前我們項目中需要jar包時,直接就把jar包復制到項目下的lib目錄,而現在我們只需要在pom.xml中配置依賴的配置文件即可。 而這個依賴對應的jar包其實就在我們本地電腦上的maven倉庫中。
如下圖,就是本地的maven倉庫中的jar文件:
在這里插入圖片描述

2.3Maven倉庫

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

倉庫的本質就是一個目錄(文件夾),這個目錄被用來存儲開發中所有依賴(就是jar包)和插件

Maven倉庫分為:

  • 本地倉庫:自己計算機上的一個目錄(用來存儲jar包)
  • 中央倉庫:由Maven團隊維護的全球唯一的。倉庫地址:https://repo1.maven.org/maven2/
  • 遠程倉庫(私服):一般由公司團隊搭建的私有倉庫

在這里插入圖片描述
當項目中使用坐標引入對應依賴jar包后,

  • 首先會查找本地倉庫中是否有對應的jar包
    • 如果有,則在項目直接引用
    • 如果沒有,則去中央倉庫中下載對應的jar包到本地倉庫
  • 還可以搭建遠程倉庫(私服),將來jar包的查找順序則變為: 本地倉庫 --> 遠程倉庫–> 中央倉庫

2.4 Maven安裝

2.4.1下載

  • 下載地址:https://maven.apache.org/download.cgi
  • 如下:
    在這里插入圖片描述

2.4.2 安裝步驟

Maven安裝配置步驟:

  1. 解壓安裝
  2. 配置倉庫
  3. 配置阿里云私服
  4. 配置Maven環境變量

1). 解壓 apache-maven-3.9.4-bin.zip(解壓即安裝)
建議解壓到沒有中文、特殊字符的路徑下。
解壓縮后的目錄結構如下:
在這里插入圖片描述

  • bin目錄 : 存放的是可執行命令。(mvn 命令重點關注)
  • conf目錄 :存放Maven的配置文件。(settings.xml配置文件后期需要修改)
  • lib目錄 :存放Maven依賴的jar包。(Maven也是使用java開發的,所以它也依賴其他的jar包)

2). 配置本地倉庫

  1. 在自己計算機上新一個目錄(本地倉庫,用來存儲jar包)
    在這里插入圖片描述
  2. 進入到conf目錄下修改settings.xml配置文件
    1. 使用超級記事本軟件,打開settings.xml文件,定位到53行
    2. 復制標簽,粘貼到注釋的外面(55行)
    3. 復制之前新建的用來存儲jar包的路徑,替換掉標簽體內容

在這里插入圖片描述
3). 配置阿里云私服
由于中央倉庫在國外,所以下載jar包速度可能比較慢,而阿里公司提供了一個遠程倉庫,里面基本也都有開源項目的jar包。
進入到conf目錄下修改settings.xml配置文件:
3. 使用超級記事本軟件,打開settings.xml文件,定位到160行左右
4. 在<mirrors>標簽下為其添加子標簽<mirror>,內容如下:

<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>

注意配置的位置,在<mirrors> ... </mirrors>中間添加配置。如下圖所示:
在這里插入圖片描述
4). 配置環境變量
Maven環境變量的配置類似于JDK環境變量配置一樣

  1. 在系統變量處新建一個變量MAVEN_HOME。 MAVEN_HOME環境變量的值,設置為maven的解壓安裝目錄
    在這里插入圖片描述
  2. 在Path中進行配置。 PATH環境變量的值,設置為:%MAVEN_HOME%\bin
    在這里插入圖片描述
  3. 打開DOS命令提示符進行驗證,出現如圖所示表示安裝成功 。
    命令為:mvn -v

在這里插入圖片描述
5). 配置關聯的JDK版本(可選)
進入到conf目錄下修改settings.xml配置文件,在 中增加如下配置:

<profile><id>jdk-17</id><activation><activeByDefault>true</activeByDefault><jdk>17</jdk></activation><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><maven.compiler.compilerVersion>17</maven.compiler.compilerVersion></properties>
</profile>

3.IDEA 集成 Maven

我們要想在IDEA中使用Maven進行項目構建,就需要在IDEA中集成Maven,那么就需要在IDEA中配置與maven的關聯。

3.1 創建 Maven 項目

3.1.1 全局設置

  1. 進入IDEA的歡迎頁面
    選擇 IDEA中 File => close project => Customize => All settings
    在這里插入圖片描述
  2. 打開 All settings , 選擇 Build,Execution,Deployment => Build Tools => Maven
    在這里插入圖片描述
  3. 配置工程的編譯版本為17
    在這里插入圖片描述

這里所設置的maven的環境信息,并未指定任何一個project,此時設置的信息就屬于全局配置信息。 以后,我們再創建project,默認就是使用我們全局配置的信息。

3.1.2 創建項目

  1. 創建一個空項目,命名為 web-project01
    在這里插入圖片描述
  2. 創建好項目之后,進入項目中,要設置JDK的版本號。選擇小齒輪,選擇 Project Structure
    在這里插入圖片描述
  3. 創建模塊,選擇Java語言,選擇Maven。 填寫模塊的基本信息
    在這里插入圖片描述
    在這里插入圖片描述
  4. 在maven項目中,創建HelloWorld類,并運行
    在這里插入圖片描述
Maven項目的目錄結構:
maven-project01|---  src  (源代碼目錄和測試代碼目錄)|---  main (源代碼目錄)|--- java (源代碼java文件目錄)|--- resources (源代碼配置文件目錄)|---  test (測試代碼目錄)|--- java (測試代碼java目錄)|--- resources (測試代碼配置文件目錄)|--- target (編譯、打包生成文件存放目錄)

3.1.3 pom 文件詳解

POM (Project Object Model) :指的是項目對象模型,用來描述當前的maven項目。

  • 使用pom.xml文件來描述當前項目。 pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- POM模型版本 --><modelVersion>4.0.0</modelVersion><!-- 當前項目坐標 --><groupId>com.itheima</groupId><artifactId>maven-project01</artifactId><version>1.0-SNAPSHOT</version><!-- 項目的JDK版本及編碼 --><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

pom文件詳解:

  • <project> :pom文件的根標簽,表示當前maven項目
  • <modelVersion>:聲明項目描述遵循哪一個POM模型版本
    • 雖然模型本身的版本很少改變,但它仍然是必不可少的。目前POM模型版本是4.0.0
  • 坐標 :
    • <groupId> <artifactId> <version>
    • 定位項目在本地倉庫中的位置,由以上三個標簽組成一個坐標
  • <maven.compiler.source> :編譯JDK的版本
  • <maven.compiler.target> :運行JDK的版本
  • <project.build.sourceEncoding> : 設置項目的字符集

3.2Maven 坐標

什么是坐標?

  • Maven中的坐標是資源的唯一標識 , 通過該坐標可以唯一定位資源位置
  • 使用坐標來定義項目或引入項目中需要的依賴

Maven坐標主要組成:

  • groupId:定義當前Maven項目隸屬組織名稱(通常是域名反寫,例如:com.itheima)
  • artifactId:定義當前Maven項目名稱(通常是模塊名稱,例如 order-service、goods-service)
  • version:定義當前項目版本號
    • SNAPSHOT: 功能不穩定、尚處于開發中的版本,即快照版本
    • RELEASE: 功能趨于穩定、當前更新停止,可以用于發行的版本

如下圖就是使用坐標表示一個項目:
在這里插入圖片描述

注意:

  • 上面所說的資源可以是插件、依賴、當前項目。
  • 我們的項目如果被其他的項目依賴時,也是需要坐標來引入的

3.3 導入 Maven 項目

在IDEA中導入Maven項目,有兩種方式。

  • 方式一:File -> Project Structure -> Modules -> Import Module -> 選擇maven項目的pom.xml。

在這里插入圖片描述

  • 方式二:Maven面板 -> +(Add Maven Projects) -> 選擇maven項目的pom.xml。

在這里插入圖片描述

4.依賴管理

4.1 依賴配置

4.1.1 基本配置

依賴:指當前項目運行所需要的jar包。一個項目中可以引入多個依賴:
例如:在當前工程中,我們需要用到logback來記錄日志,此時就可以在maven工程的pom.xml文件中,引入logback的依賴。具體步驟如下:

  1. 在pom.xml中編寫標簽
  2. 在標簽中使用引入坐標
  3. 定義坐標的 groupId、artifactId、version
<dependencies><!-- 依賴 : spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.4</version></dependency>
</dependencies>
  1. 點擊刷新按鈕,引入最新加入的坐標
    刷新依賴:保證每一次引入新的依賴,或者修改現有的依賴配置,都可以加入最新的坐標
    在這里插入圖片描述

注意事項:

  1. 如果引入的依賴,在本地倉庫中不存在,將會連接遠程倉庫 / 中央倉庫,然后下載依賴(這個過程會比較耗時,耐心等待)
  2. 如果不知道依賴的坐標信息,可以到mvn的中央倉庫(https://mvnrepository.com/)中搜索

4.1.2查找依賴

  1. 利用中央倉庫搜索的依賴坐標,以常見的logback-classic為例。
    在這里插入圖片描述
  2. 利用IDEA工具搜索依賴,以常見的logback-classic為例。
    在這里插入圖片描述
  3. 熟練上手maven后,快速導入依賴,以常見的logback-classic為例。
    在這里插入圖片描述

4.1.3依賴傳遞

我們上面在pom.xml中配置了一項依賴,就是spring-context,但是我們通過右側的maven面板可以看到,其實引入進來的依賴,并不是這一項,有非常多的依賴,都引入進來了。我們可以看到如下圖所示:
在這里插入圖片描述
為什么會出現這樣的現象呢? 那這里呢,就涉及到maven中非常重要的一個特性,那就是Maven中的依賴傳遞
所謂maven的依賴傳遞,指的就是如果在maven項目中,A 依賴了B,B依賴了C,C依賴了D,那么在A項目中,也會有C、D依賴,因為依賴會傳遞。

那如果,傳遞下來的依賴,在項目開發中,我們確實不需要,此時,我們可以通過Maven中的排除依賴功能,來將這個依賴排除掉。

4.1.4排除依賴

  • 排除依賴:指主動斷開依賴的資源,被排除的資源無需指定版本。
  • 配置形式如下:
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.4</version><!--排除依賴, 主動斷開依賴的資源--><exclusions><exclusion><groupId>io.micrometer</groupId><artifactId>micrometer-observation</artifactId></exclusion></exclusions>
</dependency>

4.2生命周期

4.2.1介紹

Maven的生命周期就是為了對所有的構建過程進行抽象和統一。 描述了一次項目構建,經歷哪些階段。

在Maven出現之前,項目構建的生命周期就已經存在,軟件開發人員每天都在對項目進行清理,編譯,測試及部署。雖然大家都在不停地做構建工作,但公司和公司間、項目和項目間,往往使用不同的方式做類似的工作。

Maven從大量項目和構建工具中學習和反思,然后總結了一套高度完美的,易擴展的項目構建生命周期。這個生命周期包含了項目的清理,初始化,編譯,測試,打包,集成測試,驗證,部署和站點生成等幾乎所有構建步驟。

Maven對項目構建的生命周期劃分為3套(相互獨立):
在這里插入圖片描述

  • clean:清理工作。
  • default:核心工作。如:編譯、測試、打包、安裝、部署等。
  • site:生成報告、發布站點等。
    三套生命周期又包含哪些具體的階段呢, 我們來看下面這幅圖:
    在這里插入圖片描述
    每套生命周期包含一些階段(phase),階段是有順序的,后面的階段依賴于前面的階段。
    我們看到這三套生命周期,里面有很多很多的階段,這么多生命周期階段,其實我們常用的并不多,主要關注以下幾個:
  • clean:移除上一次構建生成的文件
  • compile:編譯項目源代碼
  • test:使用合適的單元測試框架運行測試(junit)
  • package:將編譯后的文件打包,如:jar、war等
  • install:安裝項目到本地倉庫
    Maven的生命周期是抽象的,這意味著生命周期本身不做任何實際工作。在Maven的設計中,實際任務(如源代碼編譯)都交由插件來完成。
    在這里插入圖片描述
    IDEA工具為了方便程序員使用maven生命周期,在右側的maven工具欄中,已給出快速訪問通道。
    在這里插入圖片描述
  • 生命周期的順序是:clean --> validate --> compile --> test --> package --> verify --> install --> site --> deploy
  • 我們需要關注的就是:clean --> compile --> test --> package --> install

說明:在同一套生命周期中,我們在執行后面的生命周期時,前面的生命周期都會執行。
思考:當運行package生命周期時,clean、compile生命周期會不會運行?
clean不會運行,compile會運行。 因為compile與package屬于同一套生命周期,而clean與package不屬于同一套生命周期。

4.2.2執行

在日常開發中,當我們要執行指定的生命周期時,有兩種執行方式:

  1. 在idea工具右側的maven工具欄中,選擇對應的生命周期,雙擊執行
  2. 在DOS命令行中,通過maven命令執行

方式一:在idea中執行生命周期

  • 選擇對應的生命周期,雙擊執行
    [圖片]
    其他的生命周期都是類似的道理,雙擊運行即可。

方式二:在命令行中執行生命周期

  1. 打開maven項目對應的磁盤目錄
    在這里插入圖片描述
    類似的道理,我們也可以在命令執行:
  • mvn compile
  • mvn test
  • mvn package
  • mvn install

5.單元測試

5.1介紹

測試:是一種用來促進鑒定軟件的正確性、完整性、安全性和質量的過程。
階段劃分:單元測試、集成測試、系統測試、驗收測試。
在這里插入圖片描述
1). 單元測試

  • 介紹:對軟件的基本組成單位進行測試,最小測試單位。
  • 目的:檢驗軟件基本組成單位的正確性。
  • 測試人員:開發人員

2). 集成測試

  • 介紹:將已分別通過測試的單元,按設計要求組合成系統或子系統,再進行的測試。
  • 目的:檢查單元之間的協作是否正確。
  • 測試人員:開發人員

3). 系統測試

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

4). 驗收測試

  • 介紹:交付測試,是針對用戶需求、業務流程進行的正式的測試。
  • 目的:驗證軟件系統是否滿足驗收標準。
  • 測試人員:客戶/需求方

測試方法:白盒測試、黑盒測試 及 灰盒測試。
在這里插入圖片描述
1). 白盒測試
清楚軟件內部結構、代碼邏輯。
用于驗證代碼、邏輯正確性。

2). 黑盒測試
不清楚軟件內部結構、代碼邏輯。
用于驗證軟件的功能、兼容性、驗收測試等方面。

3). 灰盒測試
結合了白盒測試和黑盒測試的特點,既關注軟件的內部結構又考慮外部表現(功能)。
在這里插入圖片描述

5.2 Junit入門

5.2.1單元測試

  • 單元測試:就是針對最小的功能單元(方法),編寫測試代碼對其正確性進行測試。
  • JUnit:最流行的Java測試框架之一,提供了一些功能,方便程序進行單元測試(第三方公司提供)。

在之前的課程中,我們進行程序的測試 ,都是main方法中進行測試 。如下圖所示:
在這里插入圖片描述
通過main方法是可以進行測試的,可以測試程序是否正常運行。但是main方法進行測試時,會存在如下問題:

  1. 測試代碼與源代碼未分開,難維護。
  2. 一個方法測試失敗,影響后面方法。
  3. 無法自動化測試,得到測試報告。

而如果我們使用了JUnit單元測試框架進行測試,將會有以下優勢:

  1. 測試代碼與源代碼分開,便于維護。
  2. 可根據需要進行自動化測試。
  3. 可自動分析測試結果,產出測試報告。在這里插入圖片描述

5.2.2入門程序

需求:使用JUnit,對UserService中的業務方法進行單元測試,測試其正確性。

  1. 在pom.xml中,引入JUnit的依賴。
<!--Junit單元測試依賴-->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version><scope>test</scope>
</dependency>
  1. 在test/java目錄下,創建測試類,并編寫對應的測試方法,并在方法上聲明@Test注解。
@Test
public void testGetAge(){Integer age = new UserService().getAge("110002200505091218");System.out.println(age);
}
  1. 運行單元測試 (測試通過:綠色;測試失敗:紅色)。
  • 測試通過顯示綠色
    在這里插入圖片描述
  • 測試失敗顯示紅色在這里插入圖片描述

注意:

  • 測試類的命名規范為:XxxxTest
  • 測試方法的命名規定為:public void xxx(){…}

5.3斷言

JUnit提供了一些輔助方法,用來幫我們確定被測試的方法是否按照預期的效果正常工作,這種方式稱為斷言
在這里插入圖片描述
示例演示:

package com.itheima;import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;public class UserServiceTest {@Testpublic void testGetAge2(){Integer age = new UserService().getAge("110002200505091218");Assertions.assertNotEquals(18, age, "兩個值相等");
//        String s1 = new String("Hello");
//        String s2 = "Hello";
//        Assertions.assertSame(s1, s2, "不是同一個對象引用");}@Testpublic void testGetGender2(){String gender = new UserService().getGender("612429198904201611");Assertions.assertEquals("男", gender);}
}

測試結果輸出:
在這里插入圖片描述

5.4常見注解

在JUnit中還提供了一些注解,還增強其功能,常見的注解有以下幾個:
在這里插入圖片描述
演示 @BeforeEach,@AfterEach,@BeforeAll,@AfterAll 注解:

public class UserServiceTest {@BeforeEachpublic void testBefore(){System.out.println("before...");}@AfterEachpublic void testAfter(){System.out.println("after...");}@BeforeAll //該方法必須被static修飾public static void testBeforeAll(){ System.out.println("before all ...");}@AfterAll //該方法必須被static修飾public static void testAfterAll(){System.out.println("after all...");}@Testpublic void testGetAge(){Integer age = new UserService().getAge("110002200505091218");System.out.println(age);}@Testpublic void testGetGender(){String gender = new UserService().getGender("612429198904201611");System.out.println(gender);}}   

輸出結果如下:在這里插入圖片描述
演示 @ParameterizedTest ,@ValueSource ,@DisplayName 注解:

package com.itheima;import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;@DisplayName("測試-學生業務操作")
public class UserServiceTest {@DisplayName("測試-獲取年齡")@Testpublic void testGetAge(){Integer age = new UserService().getAge("110002200505091218");System.out.println(age);}@DisplayName("測試-獲取性別")@Testpublic void testGetGender(){String gender = new UserService().getGender("612429198904201611");System.out.println(gender);}@DisplayName("測試-獲取性別3")@ParameterizedTest@ValueSource(strings = {"612429198904201611","612429198904201631","612429198904201626"})public void testGetGender3(String idcard){String gender = new UserService().getGender(idcard);System.out.println(gender);}
}

輸出結果如下:
在這里插入圖片描述
思考: 在maven項目中,test目錄存放單元測試的代碼,是否可以在main目錄中編寫單元測試呢 ? 可以,但是不規范在這里插入圖片描述

5.5依賴范圍

依賴的jar包,默認情況下,可以在任何地方使用,在main目錄下,可以使用;在test目錄下,也可以使用。
在maven中,如果希望限制依賴的使用范圍,可以通過 <scope>…</scope> 設置其作用范圍。
在這里插入圖片描述
作用范圍

  • 主程序范圍有效。(main文件夾范圍內)
  • 測試程序范圍有效。(test文件夾范圍內)
  • 是否參與打包運行。(package指令范圍內)

可以在pom.xml中配置 <scope></scope> 屬性來控制依賴范圍。在這里插入圖片描述
如果對Junit單元測試的依賴,設置了scope為 test,就代表,該依賴,只是在測試程序中可以使用,在主程序中是無法使用的。所以我們會看到如下現象:在這里插入圖片描述
如上圖所示,給junit依賴通過scope標簽指定依賴的作用范圍。 那么這個依賴就只能作用在測試環境,其他環境下不能使用。
scope的取值常見的如下: 在這里插入圖片描述

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

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

相關文章

http協議同時傳輸文本和數據的新理解

首先&#xff0c;承認本人對于http協議認知確實不夠&#xff0c;從來沒有仔細研究這一塊。 其次&#xff0c;這回確實要把自己十幾年的理解更新一下了&#xff0c;主要還是自己過去沒有認真研究過http協議。 這一次是這么回事&#xff0c;碰到一個情況&#xff0c;要在一次消…

《安富萊嵌入式周報》第354期: 開源36通道16bit同步數據采集卡,開源PoE以太網GPIB,分體式鍵盤DIY,微軟WSL開源,USB轉車載以太網

周報匯總地址&#xff1a;嵌入式周報 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬漢嵌入式論壇 - Powered by Discuz! 視頻版&#xff1a; https://www.bilibili.com/video/BV1kJThzxETY/ 《安富萊嵌入式周報》第354期: 開源36通道16bit同…

Hyperlane 框架詳解與使用指南

hyperlane 是一個高性能且輕量級的 Rust HTTP 框架&#xff0c;設計目標是簡化現代 Web 服務的開發&#xff0c;同時兼顧靈活性和性能表現。本文將詳細介紹 hyperlane 框架的核心功能、API 設計、生命周期模型、路由支持及性能測試結果&#xff0c;幫助開發者快速掌握和應用該框…

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;來自 Elastic Jeffrey Rengifo 學習如何將 ES|QL 與 JavaScript 的 Apache Arrow 客戶端工具一起使用。 想獲得 Elastic 認證嗎&#xff1f;了解下一期 Elasticsearch Engineer 培訓的時間吧&#xff01; Elasticsearch 擁有眾多新功能&#xff0c;助你為自己…

從零實現富文本編輯器#5-編輯器選區模型的狀態結構表達

先前我們總結了瀏覽器選區模型的交互策略&#xff0c;并且實現了基本的選區操作&#xff0c;還調研了自繪選區的實現。那么相對的&#xff0c;我們還需要設計編輯器的選區表達&#xff0c;也可以稱為模型選區。編輯器中應用變更時的操作范圍&#xff0c;就是以模型選區為基準來…

一個小小的 flask app, 幾個小工具,拼湊一下

1. 起因&#xff0c; 目的: 自己的工具&#xff0c;為自己服務。給大家做參考。項目地址&#xff1a; https://github.com/buxuele/flask_utils 2. 先看效果 3. 過程: 一個有趣的 Flask 工具集&#xff1a;從無到有的開發歷程 緣起&#xff1a;為什么要做這個項目&#xff…

織夢dedecms怎樣用標簽調用隨機數?

?在使用織夢模板建站中&#xff0c;隨機數作為一個偶爾使用到的參數&#xff0c;在具體使用中雖然用的少&#xff0c;但是今天跟版網小編給大家介紹下&#xff0c;大家可以參考下&#xff1a; 實現隨機數的調用可以使用下面的js&#xff1a; 方法一&#xff1a;js代碼 Math…

訪問服務器項目,服務器可以ping通,但是端口訪問不到

原因&#xff1a;端口未開放 假設項目部署服務器為205&#xff0c;在90服務器訪問205項目 1、首先在205確定項目啟動&#xff0c;看端口是否占用 # Windows&#xff08;檢查端口占用&#xff09; netstat -ano | findstr "8103"期望輸出&#xff1a; TCP 0.0.…

云原生核心技術 (7/12): K8s 核心概念白話解讀(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;歡迎來到《云原生核心技術》系列的第七篇&#xff01; 在上一篇&#xff0c;我們成功地使用 Minikube 或 kind 在自己的電腦上搭建起了一個迷你但功能完備的 Kubernetes 集群。現在&#xff0c;我們就像一個擁有了一塊嶄新數字土地的農場主&#xff0c;是時…

華為云Flexus+DeepSeek征文 | 基于ModelArts Studio、DeepSeek大模型和Dify搭建網站智能客服助手

目錄 一、前言 二、ModelArts Studio&#xff08;MaaS&#xff09;介紹與應用場景 2.1ModelArts Studio&#xff08;MaaS&#xff09;介紹 2.2 ModelArts Studio&#xff08;MaaS&#xff09;使用場景 2.3 開通MaaS服務 2.4 開通DeepSeek-V3商用服務 三、華為云Flexus簡介 3.1 …

『uniapp』url攔截屏蔽 避免webview中打開淘寶店鋪自動跳轉淘寶

目錄 分析1. wv.overrideUrlLoading2. 參數 `mode: allow`3. 參數 `match: ^(http|https)://.*`4. 回調函數 `function(e) { console.warn(allow url:, e.url); }`作用:可能的應用場景:核心代碼總結歡迎關注 『uniapp』 專欄,持續更新中 歡迎關注 『uniapp』 專欄,持續更新…

將對透視變換后的圖像使用Otsu進行閾值化,來分離黑色和白色像素。這句話中的Otsu是什么意思?

Otsu 是一種自動閾值化方法&#xff0c;用于將圖像分割為前景和背景。它通過最小化圖像的類內方差或等價地最大化類間方差來選擇最佳閾值。這種方法特別適用于圖像的二值化處理&#xff0c;能夠自動確定一個閾值&#xff0c;將圖像中的像素分為黑色和白色兩類。 Otsu 方法的原…

Zookeeper 和 Kafka 版本與 JDK 要求

Apache Zookeeper 和 Apache Kafka 在不同版本中對 JDK 的要求如下表所示(基于官方文檔和歷史版本記錄整理): 1. Zookeeper 版本與 JDK 要求 Zookeeper 版本要求的最低 JDK 版本說明3.4.x 系列JDK 6生產環境建議用 JDK 8(舊版兼容性強)。3.5.x 系列(3.5.5+)JDK 83.5.0 …

V837s-SDK Telnetd服務連接不上異常解決

目錄 前言 一、檢查 Telnetd 服務是否啟動 二、問題解決 總結 前言 在基于 V837s-SDK 進行開發的過程中,Telnetd 服務連接不上是一個較為常見且棘手的問題。Telnet 作為一種遠程登錄協議,在開發調試時為我們提供了便捷的遠程操作方式。若其連接出現異常,將嚴重影響開發進度…

滑動窗口最大值和最小值

題目&#xff1a; 思路&#xff1a; 窗口進行滑動時&#xff0c;需要快速獲取min和max&#xff0c;因此需要一個結構來保存最值&#xff0c;而不是臨時計算。動態的最值更新容易聯想到單調棧&#xff0c;但是這里需要頻繁增刪元素&#xff0c;因此用雙端隊列&#xff0c;front…

JVM——對象創建全家桶:JVM中對象創建的模式及最佳實踐

引入 在 Java 應用開發中&#xff0c;對象創建是最基礎且高頻的操作&#xff0c;但往往也是性能優化的關鍵切入點。想象一個在線閱讀平臺&#xff0c;每天需要創建數百萬個 Book 對象來統計閱讀數據。如果每個對象的創建過程存在內存浪費或性能瓶頸&#xff0c;累積效應將導致…

VSCode中PHP使用Xdebug

本地環境 windows10php8.2 ntsxdebug v3thinkphp v8 下載Xdebug Xdebug下載地址 從xdebug下載地址,下載最新的xdebug,解壓后將php_xdebug.dll放入php目錄的ext目錄下 配置php.ini [Xdebug] zend_extension php_xdebug xdebug.client_host 127.0.0.1 xdebug.client_port…

金融系統滲透測試

金融系統滲透測試是保障金融機構網絡安全的核心環節&#xff0c;它的核心目標是通過模擬攻擊手段主動發現系統漏洞&#xff0c;防范數據泄露、資金盜取等重大風險。 一、金融系統滲透測試的核心框架 合規性驅動 需嚴格遵循《網絡安全法》《數據安全法》及金融行業監管要求&am…

高考志愿填報管理系統---開發介紹

高考志愿填報管理系統是一款專為教育機構、學校和教師設計的學生信息管理和志愿填報輔助平臺。系統基于Django框架開發&#xff0c;采用現代化的Web技術&#xff0c;為教育工作者提供高效、安全、便捷的學生管理解決方案。 ## &#x1f4cb; 系統概述 ### &#x1f3af; 系統定…

PHP 項目中新增定時任務類型的詳細步驟(以 CRMEB 為例)

1.首先需要在下面文件中增加定時任務類型 2.在app\services\system\crontab\CrontabRunServices類中增加第一步中與定時任務類型同名的方法&#xff0c;注意需要下劃線轉小駝峰 例如定時任務的類型為&#xff1a;order_tick,而在CrontabRunServices類中的方法名稱為&#xff1…