日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

spring处理循环依赖时序图_Maven依赖管理系统

發(fā)布時(shí)間:2025/3/15 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring处理循环依赖时序图_Maven依赖管理系统 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【思考】

首先,簡(jiǎn)單講述一下為什么需要這樣一個(gè)系統(tǒng)?

不知道大家有沒(méi)有思考,在一個(gè)可能有上千個(gè)模塊/產(chǎn)品的公司,對(duì)于模塊之間有較多相互依賴的情況,以下問(wèn)題該如何解決:

  • 我們把一個(gè)生命周期結(jié)束的組件移除之后,會(huì)有什么影響?
  • 在代碼修改之后,我們應(yīng)該run哪些dependency測(cè)試?yán)?#xff1f;
  • 在一個(gè)已部署的系統(tǒng)中,我們最終要使用哪個(gè)version的模塊?
  • 是否有人使用高危版本的庫(kù)?
  • 以上問(wèn)題,其核心原則就是,在所有產(chǎn)品的整個(gè)開(kāi)發(fā)周期中,在修改某個(gè)依賴的同時(shí),不會(huì)對(duì)其他產(chǎn)品造成任何影響

    【如何保存依賴關(guān)系】

    之前的時(shí)候,考慮過(guò)使用鍵值對(duì)數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)去保存相關(guān)的依賴,但是效果都不理想,最后選用了圖數(shù)據(jù)庫(kù)(Neo4J).

    這樣做有三個(gè)好處:

  • 對(duì)于任意模塊,不論其是否依賴其他模塊,或是被其他模塊依賴,都可以很直觀得在數(shù)據(jù)庫(kù)中體現(xiàn);
  • 對(duì)于任意模塊,其依賴的下級(jí)模塊和上級(jí)模塊可以快速地導(dǎo)出;
  • 對(duì)于跨級(jí)依賴可以有更好的體現(xiàn)。
  • 【設(shè)計(jì)】

    代碼結(jié)構(gòu)如下:

    在Model中,Dependency映射pom文件中的dependency,Project映射產(chǎn)品,Neo4jConn映射數(shù)據(jù)庫(kù)信息。

    Service中,GraphBuilder主要處理產(chǎn)品以及模塊之間的相互依賴關(guān)系,Neo4JHandler主要處理與數(shù)據(jù)庫(kù)相關(guān)的具體操作。

    Util里面,Finder繼承SimpleFileVisitor,處理一些路徑的匹配工作,PomFileFinder利用Finder,尋找所有的pom文件并返回列表,XMLConverter利用javax.xml的工具類(lèi)處理具體的xml文件。

    DependencyManager作為整個(gè)程序的入口,對(duì)外提供服務(wù)。

    【使用】

    首先在工程目錄下執(zhí)行mvn clean install/package打包;

    然后進(jìn)入target目錄下執(zhí)行:

    java -jar dependency-manager-0.0.1-SNAPSHOT-jar-with-dependencies.jar D:/workspace/so bolt://localhost:7687 neo4j neo4j Module org.spring*

    第一個(gè)參數(shù)指定pom文件路徑(默認(rèn)遞歸到20層,超過(guò)無(wú)法識(shí)別到);

    第二個(gè)參數(shù)指定數(shù)據(jù)庫(kù)的url,第三個(gè)參數(shù)指定數(shù)據(jù)庫(kù)用戶名,第四個(gè)參數(shù)指定數(shù)據(jù)庫(kù)密碼;

    第五個(gè)參數(shù)指定需要導(dǎo)出依賴關(guān)系的是產(chǎn)品還是模塊,如果指定模塊,會(huì)將所有滿足條件的模塊全部導(dǎo)出,如果只指定產(chǎn)品,則只導(dǎo)出所有產(chǎn)品之間的依賴關(guān)系。

    第六個(gè)參數(shù)指定模塊需要滿足的條件,可以指定前綴,中綴,后綴,如spring*,指所有以spring開(kāi)頭的包,這種方式可以去掉一些我們不關(guān)注的包,比如org相關(guān)的,spring框架相關(guān)的,可以大大降低我們的工作量。

    當(dāng)然,你也可以直接執(zhí)行:

      java -jar dependency-manager-0.0.1-SNAPSHOT-jar-with-dependencies.jar

    命令來(lái)獲取幫助。   

      如圖所示則執(zhí)行成功:

    【結(jié)果】

    執(zhí)行結(jié)果可以在Neo4J中查看:

    紅色為產(chǎn)品,褐色為模塊。

    【優(yōu)化】

    當(dāng)然了,這只是一個(gè)小應(yīng)用,還有很大的發(fā)展空間,之后會(huì)有如下幾個(gè)改進(jìn):

  • Dependency Manager UI可視化,可以直接將結(jié)果通過(guò)頁(yè)面的方式展示給用戶;
  • 通過(guò)自動(dòng)化的方式更新依賴關(guān)系;
  • 根據(jù)模塊使用情況自動(dòng)發(fā)出循環(huán)依賴以及廢棄庫(kù)使用的警告;
  • 可以跨平臺(tái)使用,不局限于Maven管理的Java項(xiàng)目。
  • 當(dāng)然,也希望有同樣想法的小伙伴可以提提設(shè)計(jì)上的意見(jiàn),或者閱讀過(guò)源碼之后有改進(jìn)的思路給到,都不勝榮幸。

    【獲取】

      GitHub地址:https://github.com/liufarui/dependency-manager

    總結(jié)

    以上是生活随笔為你收集整理的spring处理循环依赖时序图_Maven依赖管理系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。