最近在完成本身的想爲本身的開源項目application-center
增長一個功能:java
爲何我想增長一個這個功能呢?設想一下:tomcat
某個開源項目的某個版本的代碼出現bug或者存在嚴重的安全隱患,咱們想在整個公司層面禁止使用這個開源項目的這個版本。須要知道有哪些工程使用了這個版本的jar。安全
爲了解決上面提出的問題,咱們的解決思路會是app
思路很清晰,其實上面兩步的重點就是如何知道每一個工程的依賴項,有兩種思路:rest
<dependencyManagement>
和<dependencies>
標籤,獲得工程的依賴項/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,.....