專案引入 alipay-sdk-java20150407220053.jar 後,ClassLoader.getResource("/") 竟返回具體路徑而非預期的 null;移除該 JAR 後恢復正常返回 null。
經排查,該 JAR 內部包含一個無名稱的空目錄條目(即目錄名為空字串)。ClassLoader 在掃描類路徑根目錄時,檢測到此「根目錄下的空名目錄」,誤判為資源存在而返回路徑。
// 列出 JAR 內所有條目
jar tf alipay-sdk-java20150407220053.jar | grep -E '^/?$'
# 若輸出包含空行或單獨的 "/",即確認存在空目錄條目
getResource("/") 判斷類路徑根目錄的邏輯getResource("/") 的返回值判斷邏輯,改用明確資源路徑ClassLoader.getResource("")(空字串)與 getResource("/") 行為一致,均用於獲取類路徑根目錄 URL。正常情況下若類路徑根目錄無實際資源,應返回 null。JAR 規範允許目錄條目,但空名目錄屬於非標準產物。