Maven Scope標簽:解鎖Java項目依賴管理的秘密武器

一、Maven 與依賴管理簡介

在 Java 項目開發的龐大體系中,Maven 堪稱基石般的存在,發揮著極為關鍵的作用。它遵循 “約定優于配置” 的理念,讓項目的構建過程變得規范有序、結構化且具備良好的重復性 。比如,它強制執行標準的項目結構,就像為團隊協作搭建了一座清晰明朗的大廈框架,團隊成員無論何時加入,都能迅速熟悉項目架構,無縫融入開發工作。

依賴管理在項目開發里是核心環節。隨著項目規模不斷膨脹,所依賴的第三方庫、框架越來越多,依賴關系變得錯綜復雜。若依賴管理不善,很容易引發各種問題,像依賴沖突,不同依賴對同一庫的版本需求不同,導致項目無法正常運行;還有不必要的依賴引入,會增加項目的復雜度和打包體積,拖慢項目的構建和運行速度。

在 Maven 的依賴管理體系里,scope 標簽扮演著舉足輕重的角色。它就像是一把精準的手術刀,用于定義依賴的作用范圍,決定依賴在構建過程的不同階段如何被處理和使用。合理運用 scope 標簽,能夠巧妙避免不必要的依賴傳遞,優化構建性能,為項目的正確性和穩定性保駕護航。

二、Maven Scope 標簽基礎認知

(一)Scope 標簽是什么

在 Maven 的項目對象模型(POM)文件里,<scope>標簽是控制依賴作用范圍的關鍵配置項。它就像是給依賴加上了一把精準的 “權限鎖”,決定了依賴在項目構建生命周期各個階段的使用方式,比如在編譯、測試、運行以及打包這些階段,依賴是可用、不可用,還是有特殊的處理方式。

通過<scope>標簽,開發者能夠精細地控制依賴在項目中的行為,避免引入不必要的依賴,減少項目的復雜度和打包體積,還能巧妙解決依賴沖突問題 。例如,在一個 Web 項目里,有些依賴只是在開發階段用于編譯和測試,實際運行時由容器提供,像 Servlet API,這時就可以用<scope>標簽將其作用范圍限定在編譯和測試階段,運行時不引入,從而降低項目運行時的依賴沖突風險。

(二)常見 Scope 取值概述

Maven 中<scope>標簽有多種常見取值,每種取值都有其獨特的用途和適用場景:

  • compile:這是默認的取值,如果在聲明依賴時沒有指定<scope>,就會默認采用compile。它表明依賴在編譯、測試和運行階段都必不可少,在打包時也會被包含進最終的發布包,是一種比較強的依賴關系。比如在開發一個 Spring Boot 項目時,spring - core依賴通常就設置為compile,因為在整個項目的生命周期中都需要它提供核心功能支持。
  • provided:意味著依賴在編譯和測試階段是必需的,但運行時由外部容器(如應用服務器)或 JDK 來提供,不會被打包進最終的發布包。以開發 Java Web 應用為例,servlet - api依賴在編譯和測試時需要用到相關接口來編寫代碼,但在運行時,像 Tomcat 這樣的 Servlet 容器已經提供了該依賴,所以設置為provided。
  • runtime:表示依賴在運行和測試階段需要,但編譯階段不需要。例如 JDBC 驅動,項目代碼在編譯時只需要 JDK 提供的 JDBC 接口,而在測試和運行時才需要具體的 JDBC 驅動實現類,像mysql - connector - java依賴通常就設置為runtime。
  • test:說明依賴僅在測試編譯和測試運行階段有效,在正常的編譯和運行階段不會被使用,也不會被打包進發布包。JUnit 測試框架就是典型的test范圍依賴,只在編寫和運行測試用例時才會用到。
  • system:與provided類似,不過依賴的查找路徑不是 Maven 倉庫,而是本地系統路徑,必須配合<systemPath>元素來指定依賴文件的具體位置。由于它與本地系統緊密綁定,可能會影響項目的可移植性,所以不常用。假設項目依賴一個本地特定路徑下的加密算法庫,就可以使用system范圍依賴。
  • import:這個取值比較特殊,只能在<dependencyManagement>標簽內使用,用于從其他 POM 文件中導入依賴管理配置,主要用于解決 Maven 的單繼承問題,實現多繼承依賴管理 。在構建大型項目時,如果需要同時引入多個不同的依賴管理配置,就可以通過import來實現。

三、各 Scope 取值的常見業務場景及用法

(一)compile - 全階段依賴的中流砥柱

compile作為<scope>的默認取值,就像是項目的 “永動機”,在編譯、測試、運行和打包等各個階段都發揮著關鍵作用,始終是項目依賴體系中的核心力量。它所標識的依賴,對于項目的正常運轉至關重要,在項目的整個生命周期里都不可或缺。

以開發一個基于 Spring 框架的企業級應用為例,spring - core依賴通常會被設置為compile。在編譯階段,spring - core提供了諸如依賴注入、控制反轉等核心功能的類和接口,是項目代碼能夠正確編譯的基礎。到了測試階段,無論是單元測試還是集成測試,都需要依賴spring - core來構建測試環境,對項目中的組件進行測試。當項目運行時,spring - core更是貫穿始終,負責管理應用中的各種 Bean,協調它們之間的依賴關系,確保整個應用能夠穩定運行。在打包階段,spring - core也會被包含進最終的發布包,這樣部署到生產環境后,應用依然能夠正常使用這些核心功能 。

(二)provided - 外部提供依賴的巧妙處理

provided依賴有著獨特的生命周期表現,它僅在編譯和測試階段是必需的,一旦項目進入運行階段,這類依賴就會被外部容器或環境 “接管” 。這意味著在運行時,它們不會被打包進最終的發布包,從而避免了重復依賴和可能的沖突。

在 Web 應用開發中,servlet - api依賴是使用provided范圍的典型例子。當我們開發一個 Java Web 應用時,在編譯階段,需要javax.servlet包下的接口來編寫 Servlet 代碼,定義 HTTP 請求的處理邏輯。在測試階段,同樣需要這些接口來編寫測試用例,驗證 Servlet 的功能是否正確。然而,當應用部署到像 Tomcat、Jetty 這樣的 Servlet 容器中運行時,容器本身已經提供了Servlet API的實現,我們的應用無需再重復打包這些依賴。通過將Servlet API的依賴范圍設置為provided,既保證了開發和測試階段的正常使用,又減少了發布包的體積,提高了應用的部署效率。

(三)runtime - 運行時才需的依賴掌控

runtime依賴的特點十分鮮明,在編譯階段,它會被 “跳過”,不參與項目代碼的編譯過程,但在運行和測試階段,它卻 “挺身而出”,發揮關鍵作用。這種特性使得項目在編譯時可以依賴更輕量級的接口,減少編譯時的依賴負擔,而在實際運行和測試時,再引入完整的依賴實現。

JDBC 驅動的使用場景很好地詮釋了runtime依賴的作用。在 Java 項目中,編寫數據庫操作代碼時,編譯階段只需要 JDK 提供的 JDBC 接口,如java.sql.Connection、java.sql.Statement等,這些接口定義了與數據庫交互的標準方法,項目代碼通過這些接口來編寫通用的數據庫操作邏輯。而在運行和測試階段,要實際連接到數據庫并執行 SQL 語句,就需要具體的 JDBC 驅動實現類,比如連接 MySQL 數據庫時需要mysql - connector - java驅動。將mysql - connector - java依賴的范圍設置為runtime,既保證了編譯階段的簡潔性,又確保了運行和測試階段能夠順利連接數據庫,執行數據操作 。

(四)test - 只為測試而生的依賴配置

test范圍的依賴是專門為測試環節 “量身定制” 的,它們僅在測試編譯和運行階段可用,在正常的編譯和運行階段,這些依賴會被 “隱藏” 起來,不會對項目的實際運行產生任何影響,也不會被打包進最終的發布包。

JUnit 測試框架是test范圍依賴的典型代表。在項目開發過程中,為了確保代碼的正確性和穩定性,我們會編寫大量的測試用例。JUnit 提供了豐富的注解和斷言方法,幫助我們方便地編寫和執行測試用例。在測試編譯階段,需要 JUnit 的類和接口來定義測試類、編寫測試方法,以及使用斷言來驗證測試結果。在測試運行階段,JUnit 會負責加載和執行這些測試用例,生成測試報告。而在項目正常編譯和運行時,JUnit 相關的依賴并不會被引入,這樣既保證了測試的獨立性和靈活性,又不會增加項目運行時的開銷。

(五)system - 本地系統依賴的特殊引用

system依賴是一種比較特殊的依賴范圍,它從本地系統獲取依賴,而不是從 Maven 倉庫中下載。使用system依賴時,必須配合<systemPath>元素來指定依賴文件在本地系統中的具體路徑 。由于它與本地系統緊密綁定,一旦項目需要在不同的環境中部署,可能會因為依賴路徑的不一致而導致問題,所以通常不推薦使用。

假設項目依賴一個本地特定路徑下的加密算法庫,該庫可能因為某些原因無法發布到 Maven 倉庫,這時可以使用system范圍依賴。在pom.xml文件中的配置示例如下:

<dependency><groupId>com.example</groupId><artifactId>crypto-library</artifactId><version>1.0.0</version><scope>system</scope><systemPath>${project.basedir}/libs/crypto-library.jar</systemPath></dependency>

上述配置中,${project.basedir}表示項目的根目錄,通過這種方式指定了本地加密算法庫的路徑。但要注意,這種配置方式會使項目的可移植性變差,在團隊協作和不同環境部署時需要特別小心。

(六)import - 解決依賴繼承難題

import取值在<scope>標簽中比較特殊,它僅能在<dependencyManagement>標簽內使用,主要用于解決 Maven 的單繼承問題,實現多繼承依賴管理 。通過import,可以從其他 POM 文件中導入依賴管理配置,使得項目能夠方便地復用和統一管理依賴版本。

在 Spring Boot 項目中,經常會用到import來繼承多個依賴配置。例如,Spring Boot 提供了spring - boot - dependencies的 POM 文件,它定義了一系列 Spring Boot 相關依賴的版本號。在項目的pom.xml文件中,可以通過以下配置導入這個 POM 文件:


<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.5</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement>

導入后,在<dependencies>標簽中聲明 Spring Boot 相關的依賴時,就無需再顯式指定版本號,項目會自動使用spring - boot - dependencies中定義的版本,這樣大大簡化了依賴管理,確保了項目中各個依賴版本的一致性和兼容性。

四、Scope 標簽的依賴傳遞規則與案例分析

(一)依賴傳遞規則詳細解讀

在 Maven 的依賴管理體系中,依賴傳遞規則是理解項目依賴關系的關鍵一環。當項目 A 依賴項目 B,而項目 B 又依賴項目 C 時,項目 C 對項目 A 來說就是傳遞性依賴 ,而<scope>標簽在其中起到了至關重要的作用,它決定了傳遞性依賴的范圍和行為。

  1. test 范圍依賴不傳遞:當 B 對 C 的依賴范圍是test時,C 不會成為 A 的依賴。這是因為test范圍的依賴僅在測試階段使用,它與項目的正常編譯和運行無關,所以不會傳遞到依賴它的項目中。比如,JUnit 是一個用于編寫和運行測試用例的框架,在項目 B 中,它可能被用于測試代碼的編譯和執行,但對于依賴 B 的項目 A 來說,這些測試相關的依賴在正常運行時是不需要的,因此不會傳遞給 A。
  1. provided 范圍依賴不傳遞:如果 B 對 C 的依賴范圍是provided,同樣 C 不會傳遞成為 A 的依賴。provided依賴意味著在運行時,該依賴會由外部容器或環境提供,不需要被打包進項目中,所以也不會傳遞到其他依賴項目。以 Servlet API 為例,在項目 B 開發 Web 應用時,編譯和測試階段需要依賴 Servlet API 來編寫 Servlet 代碼,但運行時像 Tomcat 這樣的 Servlet 容器會提供該 API,所以 B 對 Servlet API 的provided依賴不會傳遞給 A。
  1. runtime 和 compile 范圍依賴傳遞并繼承上層依賴 Scope:當 B 對 C 的依賴范圍是runtime或compile時,C 會傳遞成為 A 的依賴,并且 C 的依賴范圍會繼承 B 對 A 的依賴范圍 。例如,項目 B 對 JDBC 驅動(如mysql - connector - java)的依賴范圍是runtime,項目 A 依賴項目 B,如果 A 對 B 的依賴范圍是compile,那么項目 A 也會依賴mysql - connector - java,且其依賴范圍同樣是compile。這是因為runtime和compile范圍的依賴在項目的運行和編譯過程中都有重要作用,所以會傳遞給依賴它的項目,并保持與上層依賴相同的作用范圍。

(二)實際案例分析

假設我們有三個項目 A、B、C,它們之間的依賴關系如下:項目 A 依賴項目 B,項目 B 依賴項目 C。下面我們通過不同的<scope>配置來分析項目 C 對項目 A 的依賴情況。

  1. 案例一:B 對 C 的依賴為 test 范圍

在項目 B 的pom.xml文件中,對項目 C 的依賴配置如下:

<dependency><groupId>com.example</groupId><artifactId>C</artifactId><version>1.0.0</version><scope>test</scope></dependency>

此時,盡管項目 A 依賴項目 B,但項目 C 不會成為項目 A 的依賴。因為test范圍的依賴僅在項目 B 的測試階段起作用,不會傳遞到項目 A。在項目 A 的編譯和運行過程中,不會引入項目 C 的任何依賴,這樣可以確保項目 A 的依賴關系簡潔明了,避免不必要的依賴引入。

  1. 案例二:B 對 C 的依賴為 provided 范圍

若項目 B 對項目 C 的依賴配置為:


<dependency><groupId>com.example</groupId><artifactId>C</artifactId><version>1.0.0</version><scope>provided</scope></dependency>

同樣,項目 C 不會傳遞成為項目 A 的依賴。以開發 Java Web 應用為例,項目 B 可能依賴一個在運行時由容器提供的工具庫 C,如某個特定的日志門面實現,在編譯和測試階段需要它來編寫和測試代碼,但運行時容器已經提供了該工具庫。所以,對于依賴項目 B 的項目 A 來說,不需要引入這個在運行時由外部提供的依賴,從而減少了項目 A 的依賴復雜性和潛在的沖突風險。

  1. 案例三:B 對 C 的依賴為 runtime 范圍,A 對 B 的依賴為 compile 范圍

當項目 B 對項目 C 的依賴配置如下:

<dependency><groupId>com.example</groupId><artifactId>C</artifactId><version>1.0.0</version><scope>runtime</scope></dependency>

并且項目 A 對項目 B 的依賴范圍是compile時,項目 C 會傳遞成為項目 A 的依賴,且依賴范圍為compile。例如,項目 B 是一個數據訪問層模塊,依賴mysql - connector - java(即項目 C)來連接和操作 MySQL 數據庫,其依賴范圍為runtime。而項目 A 是一個業務邏輯層模塊,依賴項目 B 來進行數據操作,依賴范圍為compile。此時,項目 A 也會依賴mysql - connector - java,并且依賴范圍同樣為compile,因為在項目 A 的整個生命周期中,需要通過項目 B 使用mysql - connector - java來進行數據庫操作。

  1. 案例四:B 對 C 的依賴為 compile 范圍,A 對 B 的依賴為 runtime 范圍

若項目 B 對項目 C 的依賴配置為:

<dependency><groupId>com.example</groupId><artifactId>C</artifactId><version>1.0.0</version><scope>compile</scope></dependency>

項目 A 對項目 B 的依賴范圍是runtime,那么項目 C 會傳遞成為項目 A 的依賴,依賴范圍為runtime。比如項目 B 是一個基礎工具類庫,依賴項目 C(如一個通用的加密庫)來提供加密功能,依賴范圍為compile。項目 A 是一個 Web 應用,在運行時依賴項目 B 來使用其中的工具方法,依賴范圍為runtime。這種情況下,項目 A 也會依賴項目 C,且依賴范圍為runtime,因為項目 A 在運行時才需要通過項目 B 使用項目 C 提供的加密功能。

五、使用 Scope 標簽的注意事項與常見問題解決

(一)注意事項

在使用<scope>標簽時,有諸多關鍵要點需要開發者格外留意,以確保項目的依賴管理準確無誤,避免出現各種潛在問題。

  1. 避免錯誤設置導致依賴缺失:<scope>標簽的取值直接決定了依賴在項目中的作用范圍,錯誤的設置可能導致依賴在關鍵階段缺失,從而引發項目構建或運行失敗 。比如,將一個在運行時必需的依賴設置為test范圍,那么在項目實際運行時,就會因為缺少該依賴而報錯。因此,在設置<scope>取值時,務必對項目的依賴需求有清晰的認識,明確每個依賴在不同階段的使用情況。
  1. 防止依賴沖突:當項目中存在多個依賴,且這些依賴對同一庫的不同版本有需求時,就容易引發依賴沖突 。<scope>標簽雖然不能直接解決依賴沖突,但合理設置它可以減少沖突的發生概率。例如,對于一些在運行時由外部容器提供的依賴,如 Servlet API,將其設置為provided范圍,避免重復引入,從而降低與其他依賴沖突的可能性。同時,在引入新的依賴時,要仔細檢查其傳遞性依賴,防止引入不必要的重復依賴。
  1. 注意依賴傳遞規則:了解<scope>標簽的依賴傳遞規則至關重要。不同的<scope>取值會導致依賴傳遞的行為不同,如test和provided范圍的依賴通常不會傳遞到依賴它的項目中,而runtime和compile范圍的依賴會傳遞并繼承上層依賴的<scope> 。在多模塊項目中,若不熟悉這些規則,可能會導致模塊間依賴關系混亂。例如,在一個模塊中設置了對某個庫的runtime依賴,而該模塊又被其他模塊依賴,如果不了解傳遞規則,可能會在其他模塊中意外引入該庫,且依賴范圍與預期不符。

(二)常見問題及解決

在使用<scope>標簽的過程中,可能會出現各種問題,下面針對一些常見問題給出排查和解決方法。

  1. 編譯時找不到依賴類:如果在編譯時出現找不到依賴類的錯誤,首先要檢查<scope>標簽的設置是否正確。若將應該在編譯階段使用的依賴設置為了runtime或test范圍,就會導致編譯失敗 。例如,在開發一個 Java Web 應用時,將spring - webmvc依賴設置為runtime,而在編譯控制器類時需要使用其中的注解和接口,就會出現編譯錯誤。解決方法是將<scope>標簽修改為compile,確保依賴在編譯階段可用。
  1. 運行時依賴缺失:當項目在運行時提示依賴缺失時,同樣要檢查<scope>標簽。可能是將運行時必需的依賴設置為了provided范圍,而運行環境并沒有提供該依賴 。比如,在一個 Spring Boot 項目中,將mysql - connector - java依賴設置為provided,但運行時并沒有外部環境提供該驅動,就會導致數據庫連接失敗。此時,需要將<scope>標簽改為runtime或compile,保證運行時依賴可用。
  1. 依賴沖突導致的異常:如果項目出現依賴沖突,如不同依賴對同一庫的版本需求不同,可能會引發各種異常,如NoSuchMethodError、ClassNotFoundException等 。解決依賴沖突的方法有多種。首先,可以使用mvn dependency:tree命令查看項目的依賴樹,找出沖突的依賴及其版本。然后,可以通過在pom.xml文件中使用<exclusions>標簽排除不必要的傳遞依賴,或者明確指定依賴的版本,確保所有依賴使用兼容的版本。例如,項目中同時引入了兩個不同版本的commons - logging依賴,可以通過<exclusions>標簽排除其中一個版本,或者統一指定一個版本,解決沖突問題。

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

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

相關文章

IP43半加固筆記本L156H

IP43半加固筆記本L156H 產品特性&#xff1a;● 標配Intel I7-7700HQ 4核8線程處理器 ● 操作系統支持Windows7/10 64bit / Li n u x ● DDR4 16G 高速內存 zui高支持64G ● 全高清顯示面板15.6寸&#xff0c;1920X1080 ● 內置海德射頻模塊SMA接口 ● 工作溫度&#xff1a;…

ZooKeeper 是什么?

ZooKeeper 是一個分布式協調服務&#xff0c;由 Apache 基金會開發&#xff0c;專為分布式系統設計。它提供了高可用、高性能、一致性的核心服務&#xff0c;幫助分布式應用解決諸如配置管理、命名服務、分布式鎖、集群協調等問題。ZooKeeper 的核心特點&#xff1a;簡單易用&a…

Java學習第六十三部分——K8s

目錄 &#x1f4eb; 一、關鍵概述 &#x1f50d; ??二、定義起源?? &#x1f680; ??三、核心特點?? &#x1f3d7;? ??四、核心組件?? &#x1f9e9; ??五、資源對象?? ? ??六、應用場景?? &#x1f9f1; ??七、Java與K8s &#x1f6e0;? ?…

【自用】JavaSE--階段測試

考試題目第一題&#xff08;10分&#xff09;需求目前有100名囚犯&#xff0c;每個囚犯的編號是1-200之間的隨機數。現在要求依次隨機生成100名囚犯的編號&#xff08;要求這些囚犯的編號是不能重復的&#xff09;&#xff0c;然后讓他們依次站成一排。(注&#xff1a;位置是從…

Vulnhub Matrix-Breakout-2-Morpheus靶機攻略

1.下載靶機 靶機下載地址&#xff1a;https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 下載后使用VM打開&#xff0c;后續選擇安裝地址開啟就算是下載好了 2.主機發現 查看網絡適配器模式&#xff08;NET模式&#xff09;&#xff0c;找到NET…

OpenCV —— 繪制圖形

&#x1f636;?&#x1f32b;?&#x1f636;?&#x1f32b;?&#x1f636;?&#x1f32b;?&#x1f636;?&#x1f32b;?Take your time ! &#x1f636;?&#x1f32b;?&#x1f636;?&#x1f32b;?&#x1f636;?&#x1f32b;?&#x1f636;?&#x1f32b;?…

RHCE(4)

主&#xff1a;從&#xff1a;

網絡安全作業三

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><link rel"style…

深入理解 ThreadLocal:從原理到最佳實踐

&#x1f4dd; 前言&#xff1a;為什么你需要了解 ThreadLocal&#xff1f;在多線程并發編程中&#xff0c;線程安全始終是一個繞不開的話題。我們常常需要為每個線程維護一份獨立的上下文數據&#xff0c;例如用戶信息、事務 ID、日志追蹤 ID 等。這些數據不能被多個線程共享&…

AD一張原理圖分成多張原理圖

先選中你要作為主級原理圖的那張原理圖&#xff0c;我這里是Sheet1,點擊設計&#xff08;D&#xff09;&#xff0c;再點擊create sheet symbol from sheet&#xff08;這個不能選錯&#xff09;快捷鍵&#xff1a;DY彈窗中選擇要加入的次級原理圖左擊鼠標放置重復上面的動作&a…

AI大模型資源

網址 https://sass.kupepoem.cn/ 登錄-選擇模型 打開上述網址后如下操作&#xff1a; 進入后&#xff0c;所有模型均可使用&#xff1a; o4-mini&#xff08;支持Deep Research深入研究&#xff09; 選擇o4-mini模型 選擇深度研究 要研究什么&#xff0c;對話直接輸入即可。…

論文閱讀--《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》

好的&#xff0c;這是《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》論文的中文翻譯&#xff1a;[文件名稱]: Besting_the_Black-Box_Barrier_Zones_for_Adversarial_Example_Defense.pdf [文件內容開始]第 1 頁 收稿日期&#xff1a;2021年10月1…

如何保證GPFS文件系統的強一致性

一、底層機制&#xff1a;分布式鎖與元數據管理GPFS 通過分布式鎖和集中式元數據管理的結合&#xff0c;確保數據和元數據的一致性&#xff1a;集中式元數據服務器&#xff08;MDS&#xff09;GPFS 采用主從架構的元數據管理&#xff0c;由指定節點&#xff08;或集群&#xff…

使用Docker+Nginx部署電商平臺項目(服務端+管理端+商城)

1.項目背景&#xff1a; 本項目作為小商場系統&#xff0c;涵蓋內容如下&#xff1a; litemall Spring Boot后端 Vue管理員前端 微信小程序用戶前端 Vue用戶移動端 1.1項目架構&#xff1a; 1.2項目技術棧&#xff1a; 本項目可以使用window運行jar包本地部署&#xff0c…

Java網絡編程入門:從基礎原理到實踐(二)

目錄 1. 網絡編程基礎&#xff1a;搞懂設備通信的底層邏輯 1.1 為啥需要網絡編程&#xff1f;—— 讓設備 “互通有無” 1.2 什么是網絡編程&#xff1f;—— 給數據 “定規矩、找路線” 1.3 網絡編程的基本概念&#xff1a;理清通信里的角色和流程 1.3.1 發送端和接收端 …

XSS內容分享

反射型XSS &#xff1a;反射型XSS 是非持久性、參數型的跨站腳本。反射型XSS 的JS 代碼在Web 應用的參數&#xff08;變量&#xff09;中&#xff0c;如搜索框的反射型XSS。在搜索框中&#xff0c;提交PoC[scriptalert(/xss/)/script]&#xff0c;點擊搜索&#xff0c;即可觸發…

電線桿距離居民區的安全距離【重要!!!】

10kV架空電線安全距離購房指南 中國大陸地區10kV架空電線距居民住宅需要滿足1.5米水平安全距離&#xff08;裸導線&#xff09;和6.5米垂直安全距離的國家強制標準。根據現行法規&#xff0c;10kV系統的電磁輻射水平極低&#xff0c;對居民健康影響可忽略不計&#xff0c;但購房…

河南萌新聯賽2025第(二)場:河南農業大學

我看到花兒在綻放 我聽到鳥兒在歌唱 我看到人們匆匆忙忙 我看到云朵在天上 我聽到小河在流淌 我看到人們漫步在路上 河南萌新聯賽2025第&#xff08;二&#xff09;場&#xff1a;河南農業大學 河南萌新聯賽2025第&#xff08;二&#xff09;場&#xff1a;河南農業大學_ACM/N…

unixbench系統性能測試

unixbench系統性能測試 環境&#xff1a; UnixBench: 6.0.0(2025-05-21)簡介 UnixBench 是一款經典的 Unix/Linux 系統性能測試工具&#xff0c;主要用于評估系統的CPU 運算能力、內存性能、多線程處理能力以及部分系統調用&#xff08;如進程創建、文件操作&#xff09;的效率…

上線了,自己開發的刷題小程序,vue3.0

嘿&#xff0c;最近我搞了個Java刷題的小程序&#xff0c;用Vue寫的&#xff0c;界面和功能都還挺完整的。今天就來跟大家聊聊這個小程序是怎么實現的&#xff0c;代碼里都藏著哪些小細節。 先看整體結構&#xff0c;我把整個頁面分成了幾個大塊&#xff1a;頂部導航欄、題目內…