vscode 支持java

2022-08-11 14:38 更新

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

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

安裝使用

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


這個(gè)插件包,包含了四個(gè)插件:

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

語言支持

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

調(diào)試

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

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

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

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

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

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

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

JSON

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

JUnit 測(cè)試

接下來,我們看看 Java 的插件對(duì) JUnit 測(cè)試的支持情況如何。當(dāng)你打開一個(gè) JUnit 測(cè)試時(shí),Java Test Runner 這個(gè)插件就會(huì)被激活了。此時(shí),在界面最左側(cè)活動(dòng)欄的最下面,多了一個(gè)按鈕,點(diǎn)擊這個(gè)按鈕,你就能看到一個(gè)測(cè)試視圖,這個(gè)視圖里展示的就是當(dāng)前項(xiàng)目中的所有測(cè)試。

在這個(gè)視圖中,你可以在測(cè)試項(xiàng)目上進(jìn)行右擊,調(diào)出上下文菜單,然后執(zhí)行單個(gè),或者多個(gè)測(cè)試。

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


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

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

問題和前瞻

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

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)