最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven?依賴作用域compile、provided、runtime、test詳解

 更新時間:2026年04月03日 10:53:32   作者:Binary-Jeff  
本文給大家介紹Maven依賴作用域compile、provided、runtime、test詳解,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

在 Maven 項目中,所有依賴通常都在 pom.xml 中通過 dependency 聲明。但并不是所有依賴在項目生命周期的各個階段都需要使用。例如,有些依賴只在 編譯階段使用,有些只在 運行階段使用,還有一些只在 測試階段使用。

為了解決這一問題,Maven 提供了 依賴作用域(Dependency Scope) 機制。
scope 用于定義依賴在 編譯、運行、測試和打包階段是否生效,從而決定該依賴是否會被加入到對應(yīng)階段的 類路徑(classpath) 中。如果不顯式指定 scope,默認(rèn)值為:

一、Maven 的依賴管理機制

在 Maven 項目中,所有依賴都通過 pom.xml 文件聲明,例如:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>6.0.0</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

 如果不顯式指定 scope,默認(rèn)值為:

compile

當(dāng) Maven 構(gòu)建項目時,會自動完成以下工作:

  • 讀取 pom.xml 中定義的依賴
  • 從遠(yuǎn)程倉庫下載依賴
  • 將依賴緩存到本地倉庫

本地倉庫位置:

~/.m2/repository

隨后 Maven 會在 不同構(gòu)建階段 將這些依賴加入不同的類路徑中。 

二、什么是類路徑(Classpath)

在 Java 中,類路徑(Classpath) 是 JVM 或 Java 編譯器用于查找 .class 文件和依賴庫的位置集合。

簡單來說:

類路徑就是 Java 程序在運行或編譯時,用來查找類文件的路徑列表。

類路徑通常包含以下幾種資源:

  • 項目編譯后的 .class 文件
  • 第三方依賴庫(jar)
  • 項目資源文件(resources)

如果某個類不在類路徑中,程序就會出現(xiàn)典型錯誤:

ClassNotFoundException
NoClassDefFoundError

而 Maven 的核心作用之一,就是 自動管理這些類路徑依賴。

三、Maven 常見的五種 scope

Maven 常見的依賴作用域主要包括以下幾種。

1 compile(默認(rèn)作用域)

compile 是 Maven 的 默認(rèn)作用域,如果不寫 scope,依賴默認(rèn)就是 compile。

特點:

  • 編譯階段可用
  • 運行階段可用
  • 測試階段可用
  • 打包時會被包含

例如:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
</dependency>

Spring 框架依賴通常就是 compile。

適用于:

  • 項目核心依賴
  • 應(yīng)用運行必須依賴的庫

2 provided

provided 表示 編譯時需要,但運行時由外部環(huán)境提供

特點:

  • 編譯階段可用
  • 運行階段不可用
  • 不會被打包

典型例子:

Servlet API

例如:

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>

原因是:

Tomcat / Jetty 已經(jīng)提供 Servlet API

如果再打包進(jìn)去就會沖突。

3 runtime

runtime 表示 編譯時不需要,但運行時需要

特點:

  • 編譯階段不可用
  • 運行階段可用
  • 會被打包

典型例子:

JDBC驅(qū)動

例如:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

原因:

編譯代碼只依賴:

java.sql

但運行數(shù)據(jù)庫時需要:

java.sql

4 test

test 作用域只在 測試階段生效。

特點:

  • 編譯主代碼不可用
  • 運行主程序不可用
  • 僅在測試代碼中可用

例如:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>

適用于:

JUnit
Mockito
TestNG

這些庫只在測試時使用。

5 system

system 依賴是 Maven 早期提供的一種方式,用于 引用本地 jar 包。

例如:

<dependency>
    <groupId>example</groupId>
    <artifactId>example-lib</artifactId>
    <scope>system</scope>
    <systemPath>D:/libs/example.jar</systemPath>
</dependency>

缺點:

  • 不參與 Maven 依賴管理
  • 不可移植

因此 基本不推薦使用

四、Maven scope 與類路徑關(guān)系

Maven 在構(gòu)建項目時,會根據(jù) scope 決定依賴是否加入不同階段的 classpath。

scope編譯運行測試打包
compile????
provided????
runtime????
test????

因此可以這樣理解:

Maven 會根據(jù) pom.xml 中依賴的 scope,在 編譯、運行和打包階段構(gòu)建不同的 classpath,從而決定哪些依賴在不同階段被引入。

到此這篇關(guān)于Maven 依賴作用域詳解:compile、provided、runtime、test的文章就介紹到這了,更多相關(guān)Maven 依賴作用域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文徹底搞定Java中常用集合的排序方法

    一文徹底搞定Java中常用集合的排序方法

    在某些特殊的場景下我們需要在Java程序中對List集合進(jìn)行排序操作,下面這篇文章主要給大家介紹了關(guān)于Java中常用集合的排序方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • java調(diào)用FFmpeg實現(xiàn)視屏壓縮功能的詳細(xì)步驟

    java調(diào)用FFmpeg實現(xiàn)視屏壓縮功能的詳細(xì)步驟

    這篇文章主要介紹了java調(diào)用FFmpeg實現(xiàn)視屏壓縮功能,本文簡單的展示了java調(diào)用FFmpeg命令實現(xiàn)視屏的壓縮的詳細(xì)步驟,需要的朋友可以參考下
    2021-09-09
  • Java?super、this、static關(guān)鍵字實踐案例

    Java?super、this、static關(guān)鍵字實踐案例

    本文詳細(xì)介紹了Java繼承的概念,包括繼承的本質(zhì)、創(chuàng)建子類對象的過程、方法重寫和方法重載的區(qū)別,以及Java的繼承層次,此外,還討論了super和this關(guān)鍵字的用法,以及static關(guān)鍵字的歸屬、內(nèi)存模型、靜態(tài)方法的調(diào)用限制和靜態(tài)代碼塊的執(zhí)行時機,感興趣的朋友一起看看吧
    2025-11-11
  • SpringBoot外部化配置的最佳實踐指南

    SpringBoot外部化配置的最佳實踐指南

    這篇文章主要介紹了SpringBoot外部化配置的核心思想和實現(xiàn)方式,包括配置來源、加載優(yōu)先級、Profile特定配置、YAML與Properties對比、通配符路徑應(yīng)用、調(diào)試工具等內(nèi)容,為多環(huán)境部署和動態(tài)管理配置提供了詳細(xì)實踐建議,需要的朋友可以參考下
    2025-10-10
  • springboot實現(xiàn)敏感字段加密存儲解密顯示功能

    springboot實現(xiàn)敏感字段加密存儲解密顯示功能

    這篇文章主要介紹了springboot實現(xiàn)敏感字段加密存儲,解密顯示,通過mybatis,自定義注解+AOP切面,Base64加解密方式實現(xiàn)功能,本文通過代碼實現(xiàn)給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 使用SpringSecurity+defaultSuccessUrl不跳轉(zhuǎn)指定頁面的問題解決方法

    使用SpringSecurity+defaultSuccessUrl不跳轉(zhuǎn)指定頁面的問題解決方法

    本人是用springsecurity的新手,今天遇到defaultSuccessUrl不跳轉(zhuǎn)指定頁面的問題,真是頭疼死了,網(wǎng)上找遍了解決方法都解決不了,今天給大家分享使用SpringSecurity+defaultSuccessUrl不跳轉(zhuǎn)指定頁面的問題解決方法,感興趣的朋友一起看看吧
    2023-12-12
  • java方法通用返回結(jié)果集封裝操作

    java方法通用返回結(jié)果集封裝操作

    這篇文章主要介紹了java方法通用返回結(jié)果集封裝操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 一文了解Java Log框架徹底搞懂Log4J,Log4J2,LogBack,SLF4J

    一文了解Java Log框架徹底搞懂Log4J,Log4J2,LogBack,SLF4J

    本文主要介紹了一文了解Java Log框架徹底搞懂Log4J,Log4J2,LogBack,SLF4J,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • java 在Jetty9中使用HttpSessionListener和Filter

    java 在Jetty9中使用HttpSessionListener和Filter

    這篇文章主要介紹了java 在Jetty9中使用HttpSessionListener和Filter的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 淺談java 單例模式DCL的缺陷及單例的正確寫法

    淺談java 單例模式DCL的缺陷及單例的正確寫法

    這篇文章主要介紹了淺談java 單例模式DCL的缺陷及單例的正確寫法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

嘉祥县| 鄂托克旗| 新宾| 东辽县| 隆林| 谷城县| 同心县| 肥东县| 墨竹工卡县| 玛沁县| 平陆县| 通榆县| 内乡县| 韶山市| 西和县| 铁岭市| 南开区| 时尚| 寿光市| 仙游县| 清流县| 顺昌县| 静安区| 翼城县| 松原市| 韩城市| 淮安市| 漾濞| 剑川县| 彝良县| 台南县| 梁河县| 固镇县| 剑川县| 洞头县| 阳原县| 临沭县| 华阴市| 东丰县| 京山县| 密山市|