簡體   English   中英

是否可以檢測到哪些已棄用的類被積極使用?

[英]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列出不推薦使用的方法,列出哪些源已經可用。

  1. 在Eclipse中,轉到窗口->首選項-> Java->編譯器->錯誤/警告->不建議使用和受限制的API :將級別設置為WARNING並檢查其他項目。
  2. 在“問題”視圖中,單擊選項卡-> 分組依據-> Java問題類型附近的向下按鈕。
  3. 您將可以看到“ Deprecation使用情況”列表分組在一起,將內容復制為文本,您可以將其用於進一步准備腳本/ excel以進行分析
  4. 使用簡單的文本編輯器查找和替換from the type “和is deprecated ”的制表符
  5. 將內容復制到電子表格。 您將擁有一個類列表,這些類包含不推薦使用的方法,但具有活躍的用法。

列出不活躍的使用方法

  1. 使用上面類似的方法列出類和方法的名稱(對於方法名稱,用制表符替換文本“ The method ”和“ from the type ”)。
  2. 此列表減去上一個列表是非活動方法列表。

列出不推薦使用的動態方法

對於使用反射等的動態代碼,沒有單一的項目符號方法。 您可以使用方法名稱對基本內容進行過濾。

  1. 使用上面類似的方法列出方法名稱(將文本“ The method ”和“ from the type ”替換為制表符)。
  2. 對於唯一的方法名稱集,循環使用grep腳本。 即使對於小型項目,此類搜索也可能很慢。 但以防萬一您想花時間。

將它們全部刪除,然后嘗試運行您的應用程序。 每次您獲得其中一個的ClassNotFoundException ,將其寫下並添加回該類。 沖洗並重復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM