最新的VS Code Java擴充套件1.1.0版本,在擴充套件匯入新的Java專案時,將不會在專案預設路徑中,生成專案的後設資料檔案,包括.project、.classpath和配置等,免去用戶在瀏覽檔案,以及Git管理程式碼版本時所產生的麻煩。

這個問題要追溯到2018年開發者,在GitHub上提出的問題,該貼文描述到,當使用VS Code的Java擴充套件開啟Java專案時,無論是Maven還是Gradle,擴充套件都會在專案資料中創建許多.project、.settings或.classpath等檔案,貼文作者表示,他必須要把這些檔案添加到.gitignore檔案中,還要把他們加入到VS Code配置中的files.exclude,才能在資源管理器中隱藏。

Java擴充套件因為匯入專案時,會在專案目錄下產生後設資料檔案的這個問題,獲得許多一星評價,隨著Java擴充套件功能越來越多,擴充套件使用的人數也穩定增加,影響範圍擴大,微軟決定再次嘗試解決這個問題。微軟提到,並不是他們的產品團隊不想解決這個問題,但這個問題根本原因在於Java語言服務的架構,使他們難以施力。

VS Code Java擴充套件使用一個稱為Eclipse JDT Language Server,由微軟和紅帽共同開發的Java語言服務專案,而JDT Language Server使用了部分Eclipse模組,這些惱人的後設資料檔案,便是由這些上游模組產生,因為這些後設資料檔案的路徑,在實作過程在程式碼中都寫死成常數,且已經被各種Eclipse模組和擴充套件參照,所以儼然成為多年的技術債。

考慮到改變上游模組的行為,可以能對下游專案產生許多不確定性,微軟過去嘗試了一些方法,像是在VS Code檔案瀏覽器中,隱藏這些後設資料檔案,並引導用戶添加到.gitignore,不過顯然用戶並不買單這個作法,因此經過了三年,微軟再次進行多項嘗試,希望能夠找到更好的解決方案。

微軟嘗試了符號連結(Symbolic link)以及Eclipse連結資源(Eclipse Linked Resources)解法,但都因為各種限制不盡理想,最後的解法則是使用檔案系統提供程式(File System Provider)。微軟解釋,檔案系統提供程式是一個Eclipse平臺的擴充點,能讓開發者實現Eclipse檔案系統介面,並將其註冊到擴展點,以處理特定URI架構的檔案請求。

微軟從檔案系統提供程式擴展點下手,繼承並覆寫Eclipse預設的檔案處理系統,透過覆寫其中一些方法,檔案系統在處理後設資料檔案時,會重新導向檔案路徑,並且讀寫檔案到專案路徑之外的地方,這項解法的優點是,對其他模組透明,不需要修改就可以正常運作,程式碼變動量也很小,最終實作只改動300行左右的程式碼。

雖然這項作法還是有其缺點,其他模組需要透過Eclipse API來讀取後設資料,不過和別的方法比起來,從檔案系統提供程式著手是最不複雜,且最適當的方法,終於解決了這個困擾用戶三年多的問題。

熱門新聞

Advertisement