[英]Validate Java Classes Inside Jar
jars中的Java類文件可以輕松替換和修改。 例如,以下命令可用於替換jar中的已編譯類文件:
jar uf JarFile.jar com\something\Class.class
如果將類文件替換為沒有破壞任何依賴關系的文件,則該代碼仍然可以執行。 不在jar中的類文件也會發生同樣的情況。
有什么方法可以驗證一組類文件(無論是否在jar中),以查看其所有依賴項是否存在並且沒有損壞?
我不想阻止類文件被修改,而是希望能夠驗證更改是否有效(關於依賴項)。 編譯器在編譯時執行此檢查(依賴項檢查),但是一旦編譯了類,如何才能驗證類文件本身?
你不能。
至少:不是真的。 問題是Java僅在需要時才在運行時加載類。 因此,最終可以從jar文件中刪除一個類,並且只要沒有執行任何引用該類的代碼,事情運行就非常順利。
考慮以下示例:
class A{ public static void main( String args[] ){ out.println( "hello" ); } }
class B{}
編譯它,將它放在一個罐子里,從中刪除B.class,沒有問題:)
現在您可能會認為可以遍歷每個.class文件,檢查它引用了哪些類,並查看文件是否全部存在。 這不僅痛苦,而且也不完整。 您永遠不會完全捕獲裝載有反射的文件,因為它們的類名可能只是在運行時構造的。
我的建議:不要去那里。 如果有人刪除了一個類文件,那是他們自己的錯。 最好的辦法是(但僅在確實讓您擔心的情況下)嘗試在運行時捕獲ClassNotFoundException
(查看thread.setUncaughtExceptionHandler)
只需加載該類即可確保這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.