[英]Is it possible to detect which deprecated classes are actively used?
我有一個相對復雜的Java項目,其中有許多類可能未使用。
對代碼庫的靜態分析與某些類有關,但有些是動態加載的(網絡服務,持久數據等)。
有沒有一種方法可以獲取在jvm中活躍使用的不推薦使用的類的列表,因此我可以知道是否使用了這些類?
[我知道可能有很少使用的“卧鋪班級”,但這是我可以冒的風險]
您可以嘗試使用-deprecation(或-Xlint:deprecation)進行編譯,以查看是否已棄用的API(如果您必須提供源代碼的話)(我想您已經擁有了)
JVM可以選擇打印有關所有使用的類的信息。 例如:
java -verbose:class ...
您仍然必須通過其他方法過濾掉不推薦使用的設備。
我可以想到以下幾點:
向表單中的每個類添加靜態初始化器
靜態的 {
//在這里您可以發揮創意:
//要么寫一些文件,每個類都打印其名稱
//或執行System.err輸出類名,然后在以后獲取整個輸出。
}
如果您懶得手動添加代碼,則可以編寫簡單的程序將此初始化程序附加到所有以.java結尾的文件。
這是獲取正在使用的所有類的列表的簡單方法(我認為)。 祝你好運!
我過去曾經使用過像UCDetector這樣的工具。 但這需要手動評估,這對於大型項目可能會很痛苦。 您可以像下面這樣進行文本分析:
對於靜態代碼分析,請使用IDE列出不推薦使用的方法,列出哪些源已經可用。
WARNING
並檢查其他項目。 Deprecation
使用情況”列表分組在一起,將內容復制為文本,您可以將其用於進一步准備腳本/ excel以進行分析 from the type
“和is deprecated
”的制表符 The method
”和“ from the type
”)。 對於使用反射等的動態代碼,沒有單一的項目符號方法。 您可以使用方法名稱對基本內容進行過濾。
The method
”和“ from the type
”替換為制表符)。 將它們全部刪除,然后嘗試運行您的應用程序。 每次您獲得其中一個的ClassNotFoundException
,將其寫下並添加回該類。 沖洗並重復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.