統計分析工程的依賴項

統計分析工程的依賴項

最近在完成本身的想爲本身的開源項目application-center增長一個功能:java

  • 統計某個jar在哪些工程中被使用
  • 統計某個版本的jar在哪些工程中被使用

應用場景

爲何我想增長一個這個功能呢?設想一下:tomcat

某個開源項目的某個版本的代碼出現bug或者存在嚴重的安全隱患,咱們想在整個公司層面禁止使用這個開源項目的這個版本。須要知道有哪些工程使用了這個版本的jar。安全

大體思路

爲了解決上面提出的問題,咱們的解決思路會是app

  • 知道每一個工程的依賴項
  • 而後在查找這個工程是否依賴了某個版本的jar

思路很清晰,其實上面兩步的重點就是如何知道每一個工程的依賴項,有兩種思路:rest

  • 第一種辦法是:解析project中的pom.xml文件,分析其中的<dependencyManagement><dependencies>標籤,獲得工程的依賴項
  • 第二種辦法是:由於我這邊的工程所有是採用tomcat來運行的,所以能夠訪問project的/WEB-INF/lib/目錄,獲得依賴的jars的名稱

顯然第一種實現思路會比較複雜,由於須要尋找到工程中全部的pom文件,而後須要去解析每一個pom文件中的兩個標籤,而後合併去重等等的一系列操做,比較麻煩。code

而第二種就比較取巧了,實現起來比較簡單。所以咱們採用第二種思路去實現xml

具體實現

思路明確之後,實現起來很是簡單,核心代碼只有下面幾行:ci

@Resource
    private ServletContext servletContext;
    
    public List<String> getJarInfos() {
        String realPath = servletContext.getRealPath("/WEB-INF/lib/");
        return Lists.newArrayList(new File(realPath).list());
    }

這樣咱們就會獲得一個列表,這個列表就是工程的依賴項get

aopalliance-1.0.jar, c3p0-0.9.1.2.jar, classmate-1.1.0.jar, commons-lang3-3.4.jar, ecj-4.4.2.jar, guava-18.0.jar, hamcrest-core-1.3.jar,.....
相關文章
相關標籤/搜索