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

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

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

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

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

一、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,默認值為:

compile

當 Maven 構建項目時,會自動完成以下工作:

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

本地倉庫位置:

~/.m2/repository

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

二、什么是類路徑(Classpath)

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

簡單來說:

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

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

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

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

ClassNotFoundException
NoClassDefFoundError

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

三、Maven 常見的五種 scope

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

1 compile(默認作用域)

compile 是 Maven 的 默認作用域,如果不寫 scope,依賴默認就是 compile。

特點:

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

例如:

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

Spring 框架依賴通常就是 compile。

適用于:

  • 項目核心依賴
  • 應用運行必須依賴的庫

2 provided

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

特點:

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

典型例子:

Servlet API

例如:

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

原因是:

Tomcat / Jetty 已經提供 Servlet API

如果再打包進去就會沖突。

3 runtime

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

特點:

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

典型例子:

JDBC驅動

例如:

<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 與類路徑關系

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

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

因此可以這樣理解:

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

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

相關文章

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

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

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

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

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

    Java?super、this、static關鍵字實踐案例

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

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

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

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

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

    使用SpringSecurity+defaultSuccessUrl不跳轉指定頁面的問題解決方法

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

    java方法通用返回結果集封裝操作

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

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

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

    java 在Jetty9中使用HttpSessionListener和Filter

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

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

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

最新評論

喀喇沁旗| 抚宁县| 饶平县| 东城区| 灵宝市| 保亭| 吉水县| 武夷山市| 阜城县| 白玉县| 顺昌县| 高邑县| 邵阳县| 佳木斯市| 武宣县| 武川县| 米林县| 崇州市| 巢湖市| 资阳市| 密云县| 简阳市| 彰化县| 夏邑县| 云浮市| 衡山县| 清新县| 英山县| 玉树县| 靖远县| 星子县| 涟水县| 固始县| 蚌埠市| 交城县| 葵青区| 大理市| 青冈县| 罗平县| 嘉黎县| 吉水县|