[英]How to find how much of a library is being used inside a Java application?
我正在使用一個使用34個外部jar的現有Java應用程序。
我的部分工作是使代碼更清晰,更少臃腫。 通過從路徑中刪除它並測試代碼,我可以很容易地找到根本沒有使用的庫。
但是,我懷疑有一些庫只使用了一小部分(可能是一個函數或兩個函數)。
例如,有一個用於構建UI的庫。 但是,我懷疑在應用程序代碼中,它僅用於其一個/兩個日志記錄功能。 我實際上可以實現我自己的該函數版本,並完全設置應用程序的庫。
由於我無法手動瀏覽代碼,是否有任何現有工具可用於查看應用程序代碼中使用了多少代碼庫?
我傾向於使用像proguard這樣的東西來識別舊的未使用的代碼,雖然它有很多其他功能,但它們與你的問題無關。
JDepend可以告訴你應用程序類的直接依賴關系,但是這並不能真正告訴你哪些JAR可以消除,至少有兩個原因:
Class.forName
手動加載類,則同上。 從JDepend開始可能最簡單,並且僅使用它告訴您需要的JAR進行構建。 然后,在運行時期間,您將獲得類未找到的異常,這些異常將告訴您需要哪些額外的JAR。
編輯:
由於我無法手動瀏覽代碼,是否有任何現有工具可用於查看應用程序代碼中使用了多少代碼庫?
作為重讀您的問題,我意識到您要求的目標比簡單的依賴性分析更具針對性。 我認為代碼覆蓋工具可能會指向正確的方向。 一些開源的可能性:
您可以檢測整個應用程序,然后正常運行並找出實際調用的類。 但是 ,您需要完全鍛煉它。 Java根據需要加載類,因此您的應用程序可能僅依賴於某些類的某些功能。
您可以在代碼和xml中搜索JAR開頭的包。
我會嘗試從構建中刪除它並重新構建程序,當它編譯測試時。
對於快速而骯臟的策略,您可以選擇編寫腳本來遞歸所有應用程序代碼並提取所有導入,將它們排序為最少使用,將基本導入包結構與jar匹配,然后檢查使用最少導入的jar的位置。
為了更好的長期分析,請先嘗試並解決這些問題。 首先,如果可以,最好轉換應用程序使用標准構建工具,例如maven。 接下來讓應用程序工作並構建在標准IDE(例如eclipse)上。
現在,您可以搜索並使用可以使您執行所需操作的插件。
例如maven
mvn依賴:分析
並看看可以做同樣的eclipse插件
例如
http://classpathhelper.sourceforge.net/
未來可維護性
這可能是預先的額外工作,但您可以更快地分析代碼,從而使您的任務更快。 如果你想成為一名大師,你甚至可以編寫一個eclipse插件並分享它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.