工欲善其事,必先利其器之 Maven (一)

来源:https://www.cnblogs.com/java-linux/archive/2023/08/05/17607411.html
-Advertisement-
Play Games

## 1. scope 概念 maven 在引入依賴時,配置上有一個 scope 標簽,例如: ```xml com.mysql mysql-connector-j 8.1.0 runtime ``` 例子中的 `runtime` 表示**運行時**的依賴範圍,不同的 scope 對於項目在編譯,測 ...


1. scope 概念

maven 在引入依賴時,配置上有一個 scope 標簽,例如:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.1.0</version>
    <scope>runtime</scope>
</dependency>

例子中的 <scope>runtime</scope> 表示運行時的依賴範圍,不同的 scope 對於項目在編譯,測試,打包時會產生不同的效果,瞭解不同類型的 scope 可以讓開發者在引入依賴時更加準確,避免開發、測試以及最終打包發佈時出現各種奇奇怪怪的問題。

scope 是用來規定依賴與三種 classpath 的關係的,分別是:編譯 classpath,測試 classpath,運行時 classpath。

這三種 classpath 分別也對應著 maven 中主程式編譯,測試用例編譯、執行,主程式打包這幾個流程。

設置 scope 是為了使引入的依賴在該生效的 classpath 中生效,在不該生效的 classpath 中無效。這樣才能避免最終運行的程式中出現依賴衝突或者依賴缺失的情況。

2. scope 類型

依賴的 scope 的類型一共有 5 個,常用的是前 4 個,每一個 scope 的類型控制依賴會在某一個或者某幾個 classpath 中生效。

  1. compile: 預設值,此類型的依賴在主程式編譯,測試用例編譯、運行生效,項目打包時也會打進包里(也就是運行時 classpath)
  2. test: 只在測試用例編譯、執行時生效,主程式編譯及項目打包時都不會生效
  3. provided: 主程式編譯,測試用例編譯、執行時生效,但是程式打包時不會生效,也就是不會被打進包里,因為程式運行時的環境會提供此類型的依賴,打進包里反而可能出現依賴衝突的情況
  4. runtime: 主程式編譯、測試用例編譯時不會生效,測試用例執行以及程式打包時會生效
  5. system: 同 provided,只不過使用時必須通過 <system-Path> 元素顯式指定依賴文件路徑,一般與本機強綁定,可能造成構建的不可移植,應謹慎使用。

簡潔版的對應關係描述可以看下麵的表格。

3. scope 與 classpath 關係

依賴範圍(scope) 編譯 classpath 有效 測試 classpath 有效 運行時 classpath 有效 例子
compile Y Y Y spring-core
test N Y N JUnit
provided Y Y N servlet-api
runtime N Y Y JDBC 驅動
system Y Y N 本地的,Maven 倉庫之外的類庫文件

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ![file](https://img2023.cnblogs.com/other/2685289/202308/2685289-20230803180034435-79319118.png) ## 導讀 國內某頭部券商是國內排名前三的全國性大型綜合證券公司。作為證券行業領頭羊之一,該券商一直高度重 ...
  • 本文分享自華為雲社區《如何為物聯網設備註入“華為雲+鴻蒙DNA”?看華為雲IoT怎麼答【華為雲IoT +鴻蒙】》,作者: 華為IoT雲服務。 根據市場咨詢機構預測,2025年全球物聯網設備將達到252億個。但各種智能設備大多都有一套自己的系統,而且互相“孤立”,無法交流。鴻蒙的到來,就是要用同一套語 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 發現很多人還只會promise常規用法 在js項目中,promise的使用應該是必不可少的,但我發現在同事和麵試者中,很多中級或以上的前端都還停留在promiseInst.then()、promiseInst.catch()、Promis ...
  • 在JavaScript語言里有個 Math.random() 隨機函數,用於生成指定範圍內的隨機數。 #### Math.random()函數 根據官方的定義: **Math.random()** 函數返回一個浮點數, 偽隨機數在範圍[0,1),也就是說,從0(包括0)往上,但是不包括1(排除1), ...
  • 一、js有如下:1、string類型;2、number類型;3、boolean類型;4、null類型;5、undefined類型;6、Object類型;7、Array類型;8、Function類型;9、Symbol類型。共九種數據類型。js把數據類型分為“基本數據類型”和“引用數據類型”。其中6、7 ...
  • 1、父傳子( 定義:父傳子使用的是 props ) ① 首先確定父組件和子組件,然後在父組件中引入子組件,註冊並使用; 父組件代碼如下: <template> <div> <h1>父組件</h1> <!-- 使用子組件 --> <ChildView></ChildView> </div> </tem ...
  • vue3引入了Composition API,使開發者能夠更靈活組織和重用組件邏輯。採用了基於Proxy的響應式系統,對虛擬DOM進行了優化等,提升了開發體驗和性能。 ...
  • 1.查看分支 查看本地分支 git branch 查看遠程分支 git branch -r 查看本地和遠程分支 git branch -a 2.創建分支 使用以下命令創建一個本地分支 git branch <本地分支名> 使用以下命令創建一個本地分支且新建分支從特定分支拉取代碼 git branch ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...