vscode 支持java

2022-08-11 14:38 更新

VS Code上的 Java 語言支持,可以說是多家大企業(yè)通力合作了。最早成熟的 Java 插件,是由 Red Hat 公司實現(xiàn)的,叫做 Language Support for Java by Red Hat。 它背后使用的技術則是 Java Language Server,也就是 Language Server Protocol 的 Java 實現(xiàn)。除了VS Code的這個 Java 插件在使用以外,Eclipse Che 現(xiàn)在也在使用 Java Language Server。而說到 Java Language Server ,又不得不提它的底層一個非常重要的庫 Eclipse JDT (Eclipse Java development tools ),VS Code的項目領導 Erich Gamma,在加入微軟之前,就是在 IBM 負責 Eclipse JDT 這個項目的。

繼續(xù)回到 Java 插件上。Language Support for Java by Red Hat 這個插件,能夠提供代碼跳轉、自動補全、重構等智能語言功能。不過,它并不支持 Java 代碼的調試。如果要對 Java 代碼進行調試,則需要安裝另一個插件 Debugger for Java ,這個插件則是由微軟 Visual Studio 中國團隊開發(fā)和維護的。而現(xiàn)在 Red Hat 和 Visual Studio 中國團隊正在一起合作,共同為 Java 用戶在VS Code上提供更好的編程體驗。

安裝使用

為了保證你能有比較完整的 Java 開發(fā)體驗,你可以下載插件包 Java Extension Pack。


這個插件包,包含了四個插件:

不過,要注意的是,要想這些插件能夠正常工作,你需要安裝好 JDK 。如果你的環(huán)境變量里設置好了 JDK_HOME 或者 JAVA_HOME,那么插件就可以正常啟動了。而如果插件無法找到 JDK,你也可以通過在個人或者項目設置中添加 java.home 指定 JDK 的位置。

語言支持

在安裝完上面的插件后,你可以在VS Code中使用 Maven、Eclipse 和 Gradle 項目。上面我提到了 Java 語言服務的最底層是 Eclipse JDT,無論是代碼提示,還是重構、代碼跳轉等,Eclipse 里能夠完成的,VS Code中都能有接近的體驗。

調試

當你打開一個 Java 項目后,你可以點擊調試視圖里的齒輪按鈕,創(chuàng)建 launch.json 。選擇了 Java 這個環(huán)境后,Java 插件會為我們創(chuàng)建兩個調試的模板。

第一個模板,就是調試本地的項目,要注意的是,你需要填寫設置 mainClass,這個設置的值則是你想要調試的 Java Main Class,而且這個地址必須是這個類的完整地址,類似于 com.example.Main 。而第二個模板,則是將調試器 attach 到已經(jīng)在調試中的 Java 代碼,你則需要提供正在運行的調試器的地址(hostName)和端口(port)。

Java 調試配置支持的屬性,可以參考官方文檔。不過,這里有三個功能值得特別提一下。

第一個功能是跟用戶輸入有關。VS Code內置的調試面板,并不支持用戶輸入。也就是說,如果你寫的 Java 程序,依賴于用戶從命令行中輸入代碼,Java 程序會打開一個系統(tǒng)終端,然后你需要在這個系統(tǒng)終端中輸入內容。而如果你希望使用VS Code的集成終端來進行輸入的話,就可以使用調試配置屬性 “console: integratedTerminal” 。

第二個功能是Step filtering。它是什么意思呢? 當你在使用跳轉入函數(shù)(Step in),或者繼續(xù)執(zhí)行函數(shù)(Step through)等方法時,有的時候,你會跳入到 Java 語言本身的代碼中,或者進入到某些第三方庫的代碼中。但是你可能只是要調試自己的代碼,那么你就可以通過 stepFilters 這個屬性,對類的名字進行過濾,所有匹配了這個列表的類,在調試時都可以被直接跳過。你甚至還可以指定你是否要跳過構造函數(shù)、靜態(tài)函數(shù)等等。

下面就是一段 stepFilters 屬性的例子。

"stepFilters": {
    "classNameFilters": [
        "java.*",
        "javax.*",
        "com.sun.*",
        "sun.*",
        "sunw.*",
        "org.omg.*"
    ],
    "skipSynthetics": false,
    "skipStaticInitializers": false,
    "skipConstructors": false
}

JSON

第三個功能是Hot Code replacement,即“熱代碼替換”。相信對前端有經(jīng)驗的朋友已經(jīng)比較熟悉這個功能了。這個功能的作用是,當你在調試代碼的時候,如果發(fā)現(xiàn)代碼哪里寫錯了,可以立即修改。然后調試器就會默默地在底層將整個代碼執(zhí)行切換到一個新的 JVM instance 上,而你無需重啟整個調試進程,就能夠繼續(xù)調試最新的代碼了。

JUnit 測試

接下來,我們看看 Java 的插件對 JUnit 測試的支持情況如何。當你打開一個 JUnit 測試時,Java Test Runner 這個插件就會被激活了。此時,在界面最左側活動欄的最下面,多了一個按鈕,點擊這個按鈕,你就能看到一個測試視圖,這個視圖里展示的就是當前項目中的所有測試。

在這個視圖中,你可以在測試項目上進行右擊,調出上下文菜單,然后執(zhí)行單個,或者多個測試。

與此同時,在編輯器中,你可以看到每個測試的上方,都有 “Run Test” 和 “Debug Test” 等字樣。通過點擊它們,同樣可以執(zhí)行和調試測試。


另外,在上圖中,你還能夠看到一個問號,它說明測試沒有被正確執(zhí)行。你可以點擊它,這之后,VS Code則會打開一個新的編輯器,詳細介紹這個測試相關的情況。

當然,如果你覺得左側的測試視圖已經(jīng)足夠好用了,不希望在編輯器中再看到 “Run Test” 等字樣,那你也可以通過 “editor.codelens” 將其關閉。

問題和前瞻

雖然VS Code上的 Java 支持,無論是代碼積淀還是團隊陣容,都是非常強大的,但是還是有一些不盡如人意的地方:

  • 首先,就是配置還是相對繁瑣,在開發(fā) Java 項目時,還是 IDE 那樣開箱即用更省力一些。
  • 其次,支持還沒有完整,比如還不支持 ant ,對 Android 支持也不夠好。
  • 最后,也是我心目中比較重要的,性能相比較于其他重型的 IDE ,并沒有太大的優(yōu)勢。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號